1. 递归法:

/// <summary>
/// Reverse linked list by recursion
/// </summary>
/// <param name="head"></param>
public static LinkNode<T> Reverse_Recursion(LinkNode<T> head)
{
if (head == null || head.Next == null)
{
return head;
}
LinkNode<T> node = Reverse_Recursion(head.Next);
head.Next.Next = head;
head.Next = null;
return node;
}
/// Reverse linked list by recursion
/// </summary>
/// <param name="head"></param>
public static LinkNode<T> Reverse_Recursion(LinkNode<T> head)
{
if (head == null || head.Next == null)
{
return head;
}
LinkNode<T> node = Reverse_Recursion(head.Next);
head.Next.Next = head;
head.Next = null;
return node;
}
2. 非递归法:

/// <summary>
/// Reverse linked list
/// </summary>
/// <param name="head"></param>
/// <returns></returns>
public static LinkNode<T> Reverse(LinkNode<T> head)
{
if (head == null || head.Next == null)
{
return head;
}
var currentNode = head.Next;
var previousNode = head;
LinkNode<T> nextNode = null;
previousNode.Next = null;
while (currentNode != null)
{
nextNode = currentNode.Next;
currentNode.Next = previousNode;
previousNode = currentNode;
currentNode = nextNode;
}
return previousNode;
}
/// Reverse linked list
/// </summary>
/// <param name="head"></param>
/// <returns></returns>
public static LinkNode<T> Reverse(LinkNode<T> head)
{
if (head == null || head.Next == null)
{
return head;
}
var currentNode = head.Next;
var previousNode = head;
LinkNode<T> nextNode = null;
previousNode.Next = null;
while (currentNode != null)
{
nextNode = currentNode.Next;
currentNode.Next = previousNode;
previousNode = currentNode;
currentNode = nextNode;
}
return previousNode;
}