1、演算法的核心就是reverse函式,其它的都是輔助建立連結串列和輸出連結串列的。從資料結構的定義來看這是一個帶頭節點的連結串列。要弄的十分明白要耐心點畫圖看看。
2、思路:
head是指向頭結點的
p=head; //p最開始指向頭結點
s=p->next; //s最開始指向第一個節點
while(s->next!=NULL)//只要沒有到最後一個元素就繼續。最後一個元素的next肯定為NULL
{ //進入核心了樓主
t=s->next; //用t指向s後面的那個元素
s->next=p; //把s指向她前面那個,這個時候就實現了逆向了。而且是就地逆向。元素都沒有動的
p=s; //然後p向後移動s
s=t; //s向後移動到p
這樣到下一輪的時候又可以講下下個再指向剛才那個下一個。一次內推
}
s->next=p; //當最後一個的時候,還是要指向她的前一個。
head->next->next=NULL;//頭指標的下一個是指向原來的第一個。逆向後肯定是最後的那個了。所以最後的一個的next=NULL就明瞭了。
head->next=s;//s是逆序前的最後一個,逆序後是第一個,所以用頭指向他
1、演算法的核心就是reverse函式,其它的都是輔助建立連結串列和輸出連結串列的。從資料結構的定義來看這是一個帶頭節點的連結串列。要弄的十分明白要耐心點畫圖看看。
2、思路:
head是指向頭結點的
p=head; //p最開始指向頭結點
s=p->next; //s最開始指向第一個節點
while(s->next!=NULL)//只要沒有到最後一個元素就繼續。最後一個元素的next肯定為NULL
{ //進入核心了樓主
t=s->next; //用t指向s後面的那個元素
s->next=p; //把s指向她前面那個,這個時候就實現了逆向了。而且是就地逆向。元素都沒有動的
p=s; //然後p向後移動s
s=t; //s向後移動到p
這樣到下一輪的時候又可以講下下個再指向剛才那個下一個。一次內推
}
s->next=p; //當最後一個的時候,還是要指向她的前一個。
head->next->next=NULL;//頭指標的下一個是指向原來的第一個。逆向後肯定是最後的那個了。所以最後的一個的next=NULL就明瞭了。
head->next=s;//s是逆序前的最後一個,逆序後是第一個,所以用頭指向他