我們要想反轉單鏈表,必須增加一個指針指向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; }