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

版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/yy763496668 https://blog.csdn.net/yy763496668/article/details/78588668

请使用双向链表模拟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);
                    }
                }
            }
        } 
    }
}

猜你喜欢

转载自blog.csdn.net/yy763496668/article/details/78588668