單鏈表反轉(帶頭結點版)
#ifndef REVERSE_LIST_H_INCLUDED
#define REVERSE_LIST_H_INCLUDED
LinkList reverse_list(LinkList head)
{
LinkList p1=head;//p1指向頭結點
LinkList p2=p1->next;//p2是第一個資料
LinkList p3;
while(p2!=NULL)
{
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
p2=(LinkList)malloc(sizeof(LNode));//將內容為NULL的p2重新分配空間 作為你像連結串列的頭結點
p2->next=p1; //頭結點連上第一個資料
head->next->next=NULL;//head->next是第一個資料 要讓第一個資料裡的next指向NULL 使第一個資料變成尾巴
head=p2; //頭指標指向頭結點
return head;
}
#endif // REVERSE_LIST_H_INCLUDED
尤其注意尾節點的處理
由於是帶有頭結點的 所以要用head->next->next跳過原連結串列的頭結點,直接將原第一個資料的next指向NULL
所謂頭結點就是一個空的,可有可不有。頭指標指向頭結點、