演算法思想:如果採取不建立新的單鏈表的方法逆置鍊錶,我們就利用遞迴的思想實現鍊錶的逆置。首先設定乙個指向原鍊錶最後乙個結點5的指標newhead,並且由於完成逆置後的鍊錶的頭結點是結點5,所以newhead始終指向結點5。
第一次回溯:
head->next=null的意義在於能夠使結點1中的next指標為null,保證鍊錶能夠正常輸出。
實現函式如下:
lnode *
convert_list
(lnode *head)
{ lnode* newhead;
if(head ==
null
|| head-
>next ==
null
)//第乙個條件判斷鍊錶是否為空,第二個條件判斷head是否已經指向鏈尾。
return head;
newhead =
convert_list
(head-
>next)
;//保證了newhead為指向頭結點的指標,實現了鍊錶迴圈。
head-
>next-
>next = head;
//將前後兩個節點的鏈結順序翻轉
head-
>next =
null
;//保證最後乙個結點空間中的next指向null
return newhead;
編寫過程中遇到的問題:
1.逆置後鍊表頭節點的資料不輸出
原因分析:因為鍊錶逆置後沒有空結點,如果在輸出函式體中迴圈函式前加入p=p->next會導致鍊錶中頭節點的資料不輸出。
修改方法:刪除p=p->next這行**。並且將迴圈判斷語句p!=null修改為p->next!=null;
2.輸出鍊錶時程式崩潰
原因分析:在建立鍊錶時,為鍊錶新開闢的儲存空間中的next指標不為null(少了字型顏色為綠色的那行語句),導致鏈尾結點中的next為野指標。
修改方法:新增s->next=null這段語句。
python 實現鍊錶的逆置
class node def init self,value,next self.value value self.next next class link def init self,head self.link create head deflink create self,head self....
鍊錶就地逆置
就地逆置,就是在不借助任何中間變數的情況下,逆置一單鏈表。演算法思路 逆置後的點鍊錶初始為空,表中的節點不是新生成的,而是從原鍊錶當中一次 刪除 再逐個頭插到逆置表中。設逆置鍊錶的初始態為空表,刪除 已知鍊錶中 的第乙個節點,然後將它 插入 到逆置鍊錶的 表頭 即使得他成為逆置鍊錶中 新 的第乙個節...
鍊錶的逆置
5.鍊錶的逆置 已知head指向乙個帶頭節點的單向鍊錶,鍊錶中每個結點包含資料域和指標域。用鍊錶實現該鍊錶的逆置,並輸出。例如 輸入 5 整數表示要輸入的字元個數 abcde 輸出 edcba 注意 不允許通過改變每個節點的資料域來實現效果,必須改變鍊錶連線順序發生逆置。我寫的 如下 include...