c語言單向連結串列逆轉實現方法

檸檬加糖發表於2018-06-01

自己理解的思路如下所示:

從第二個節點開始,先記錄下一個節點,把第二個節點移到頭節點之前,
頭節點變為移動的這個節點
之前記錄的節點變為接下來要移動的節點
用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;

}

相關文章