【上海皿鎏软件股份有限公司】有关双向链表实现undo和redo

来源:互联网 发布:淘宝开网店要多少钱 编辑:程序博客网 时间:2024/04/29 10:27

请使用双向链表模拟undo/redo的操作。设计程序,用’>’提示用户输入,如果用户输入undo或redo,则执行相应的操作,否则视为输入,每次输入后将当前输入的所有行输出。

范例:(‘>’提示符后的字符为用户输入,其他的为程序输出)这里写图片描述

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace undoAndRedo{    class MyNode    {        public List<string> list;        public MyNode()        {            list = new List<string>();        }    }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace undoAndRedo{    class Program    {        static void Main(string[] args)        {            LinkedList<MyNode> linkList = new LinkedList<MyNode>();            MyNode tmpNode = null;            while(true)            {                Console.Write(">");                string tmpStr = Console.ReadLine();                if (tmpStr == "redo")                {                    foreach (var item in tmpNode.list)                    {                        Console.WriteLine(item);                    }                }                else if (tmpStr == "undo")                {                    foreach (var item in linkList.Last.Previous.Value.list)                    {                        Console.WriteLine(item);                    }                    linkList.RemoveLast();                    tmpNode = linkList.Last.Value;                }                else                {                    MyNode node = new MyNode();                    if (linkList.First == null)                    {                        node.list.Add(tmpStr);                        linkList.AddLast(node);                    }                    else                    {                        node.list.AddRange(linkList.Last.Value.list);                        node.list.Add(tmpStr);                        linkList.AddLast(node);                    }                    tmpNode = linkList.Last.Value;                    foreach (var item in linkList.Last.Value.list)                    {                        Console.WriteLine(item);                    }                }            }        }     }}