輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。
structlistnode
};
方法一:建立節點指標型別堆疊,遍歷鍊錶,將指標壓棧,順次出棧,實現反轉。這個占用記憶體空間較大。
listnode* reverselist(listnode*phead)//建立鍊錶list
list=phead;
if(list!=null)
}else
//末尾結點的next指標指向null
list->next=null;
return
phead;
}
思路2:依次遍歷鍊錶,改變節點的指向,注意之前要將下乙個節點的位址賦值給乙個指標next儲存。
事實上,next指標表示去掉已經反轉的鍊錶的第二個節點,pre指標表示反轉過的煉表表頭,phead指標表示去掉已經反轉的鍊錶的表頭。
listnode* reverselist(listnode*phead)return
pre;
}
鍊錶的翻轉
如何快速的實現鍊錶的翻轉,比如鍊錶a資料為 str1,str2,str3,str4,str5,str6 翻轉後則變為 str6,str5,str4,str3,str2,str1 針對上述問題我能想到的一種辦法就是以壓棧的方式來實現,其實現思路相對較為簡單,通過定義乙個鍊錶資料結構的資料棧,遍歷鍊錶,...
鍊錶翻轉的方法
鍊錶的翻轉是程式設計師面試 現頻度最高的問題之一,常見的解決方法分為遞迴和迭代兩種。最近在複習的時候,發現網上的資料都只告訴了怎麼做,但是根本沒有好好介紹兩種方法的實現過程與原理。所以我覺得有必要好好的整理一篇博文,來幫忙大家一步步理解其中的實現細節。我們知道迭代是從前往後依次處理,直到迴圈到鏈尾 ...
分析鍊錶翻轉
鍊錶翻轉分兩部分,鍊錶整表翻轉和鍊錶部分翻轉。下面討論非遞迴的做法,遞迴的做法以後有空再說。先說鍊錶整表翻轉,核心四句話 next p.next p.next pre pre p p next 顧名思義,pre是p前面的節點,next是p後面的節點。舉個例子,下圖是乙個鍊錶節點翻轉前的狀態 上面的 ...