自己理解的思路如下所示:
從第二個節點開始,先記錄下一個節點,把第二個節點移到頭節點之前,
頭節點變為移動的這個節點
之前記錄的節點變為接下來要移動的節點
用for迴圈重複
最後把原來頭節點變成尾節點(*next指向NULL)
返回連結串列 的頭節點
c語言實現程式碼如下:
struct stu *reserve(struct stu *head)
{
struct stu *p1,*p2,*p3;
p1=head;
p2=p1->next; // 這個結點為要移動的結點
while(p2) //如果下一個節點存在
{
p3=p2->next; //記錄的為要移動的結點的下一個結點
p2->next=p1; //移動結點到最前
p1=p2; //移動的結點變為新表頭
p2=p3; //下個結點變為要移動的結點
}
head->next=NULL; //移動完畢後原來head變為表尾,讓它指向為空
head=p1; //指向逆轉後的頭節點
return head;
}