我们要想反转单链表,必须增加一个指针指向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; }