我们要想反转单链表,必须增加一个指针指向q的下一个节点,这样当q的next指向p时,原来的q->next才不会失去。


使用p和q连个指针配合工作,使得两个节点间的指向反向,同时用r记录剩下的链表。

 

下图为摘抄,代码是自己写的。

p = head;

q = head->next;

反转单链表_public

 

head->next = NULL;

反转单链表_记录_02
 

 

现在进入循环体,这是第一次循环。

r = q->next;

q->next = p;

反转单链表_public_03

 

p = q;

q =r;
 

反转单链表_public_04

 

第二次循环。

r = q->next

反转单链表_记录_05

 

q->next = p;    

反转单链表_public_06
 

 

p = q;

反转单链表_记录_07

 

q = r

反转单链表_记录_08
 

第三次循环。。。。。


public class Link
{
    public Link Next;
    public string Data;
    public Link(Link next, string data)
    {
        this.Next = next;
        this.Data = data;
    }
}
public static Link ReverseLink(Link head)  //head为第一个结点前的空节点
{
    Link p=head.Next;
    if(p || p.Next) return head;
    
    head.Next=null;
    Link q=p.Next;
    while(q)
    {
        r=q.Next;
        q.Next=p;
        
        p=q;
        q=r;
    }
    
    head=p;
    return p;
}