C# code 如下:
1. 反转一个链表。循环算法。
1)
public static LinkedList<string> Reserve(LinkedList<string> link)
{
Stack<LinkedListNode<string>> stack = new Stack<LinkedListNode<string>>();
while (link.First.Next != null)
{
stack.Push(link.First);
link.RemoveFirst();
}
while (stack.Count != 0)
{
link.AddLast(stack.Pop());
}
return link;
}
2)
public static LinkedList<string> Reserve(LinkedList<string> link)
{
LinkedListNode<string> lastNode = link.Last;
LinkedListNode<string> headNode = link.First;
while (headNode != lastNode)
{
link.RemoveFirst();
link.AddAfter(lastNode,headNode);
headNode = link.First;
}
return link;
}
2. 反转一个链表。递归算法。
public static LinkedList<string> Reserve(LinkedList<string> link)
{
LinkedListNode<string> lastNode = link.Last;
LinkedListNode<string> headNode = link.First;
if (headNode != lastNode)
{
link.RemoveFirst();
link = Reserve(link);
link.AddLast(headNode);
}
return link;
}