⑴ 急急急!!!單鏈表逆置,求高手改錯!
下面幾句話問題很嚴重,導致了r所指的結點後的鏈斷裂!
r=head->next ;
p=head->next ->next ;
s->next =p->next ;
p->next =r;
r->next =NULL;
r=p;
其實,實現是想很簡單,不需要在新建一個新空頭結點。只需要利用原來的頭結點即可,思想如下:
將H頭結點後的結點依次掛到空頭結點之後即可,每次都掛在H->next上,這樣就實現了逆序排列。
代碼如下:
Node *ReverseList(Node *head)
{
Node *p, *tail, *s;
p=head->next; //p指向第一個有效結點
head->next = NULL; //摘下頭結點
while(p != NULL) //後移p直至最後一個結點
{
s = p; //取下結點
p = p->next; //p後移到下一個結點
tail = head->next;
head->next = s;
s->next = tail; //尾部掛在s後面
}
return head;
}