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;
        }

 

 

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;
        }

 

 download