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