反转单链表

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


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

 

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

p = head;

q = head->next;

\

 

head->next = NULL;

\
 

 

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

r = q->next;

q->next = p;

\

 

p = q;

q =r;
 

\

 

第二次循环。

r = q->next

\

 

q->next = p;    

\
 

 

p = q;

\

 

q = r

\
 

第三次循环。。。。。


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


你可能感兴趣的:(记录,public)