【演算法題】反轉連結串列的兩種方法
反轉單連結串列的兩種辦法
方法一:
首先,建立一個與五個元素的單連結串列,定義三個指標,cur和next分別指向頭結點和它的下一個結點,newhead指標來儲存新的頭結點(newhead初始值為NULL)。
如圖:
第二步,將cur->next指向newhead,再將cur的值賦給newhead,然後cur和next向後移動,此時cur指向數字2,next指向3,如下圖:(這一步操作斷開了1和2之間的聯絡,1成為了新的頭結點,重複執行此步驟,類似於單連結串列的頭插)
後面的迴圈步驟用圖片演示:
最後一步,cur指向NULL,迴圈結束,此時newhead是逆轉後的連結串列的頭結點。
下面是具體的程式碼實現:(不包含該單連結串列結構體的定義)
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode*cur;
struct ListNode*next;
struct ListNode*newhead=NULL;
cur=head;
while(cur)
{
next=cur->next;
cur->next=newhead;
newhead=cur;
cur=next;
}
return newhead;
}
方法二
第二種方法於第一種相比更加容易理解,建立三個指標 n1, n2, n3, n1初始值為NULL,n2為該連結串列的頭結點,n3為n2的下個結點,如下圖:
下一步操作與方法一類似,斷開n2和n3之間的聯絡,讓n2指向n1,然後更新n1 ,n2 ,n3,如圖:
然後繼續迴圈操作,直到n2指向NULL結束,n1即為逆轉後的連結串列的頭結點。
程式碼如下:
struct ListNode* reverseList(struct ListNode* head){
struct ListNode*n1,*n2,*n3;
n1=NULl;
n2=head;
n3=n2->next;
while(n2)
{
n2-next=n1;
n1=n2;
n2=n3;
if(n3) //判斷n3是否存在,若不存在則無需後續操作
n3=n3->next;
}
return n1;
}
3;
if(n3) //判斷n3是否存在,若不存在則無需後續操作
n3=n3->next;
}
return n1;
}
最後附上這道題目的leetcode連結:LeetCode逆轉單連結串列(其中有該單連結串列結構體的具體定義)
相關文章
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 建立連結串列兩種方法的區別
- 反轉連結串列
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 演算法題:反轉一個單連結串列&判斷連結串列是否有環演算法
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- 每日演算法隨筆:反轉連結串列演算法
- [每日一題] 第二題:反轉連結串列每日一題
- 反轉連結串列、合併連結串列、樹的子結構
- 【C++】“反轉連結串列”相關的題目C++
- 演算法入門題:如何反轉一個單向連結串列?演算法
- 反轉連結串列系列題練習遞迴遞迴
- JavaScript從反轉陣列到連結串列反轉JavaScript陣列
- 面試必備的「反轉連結串列」面試
- java實現連結串列反轉Java
- leetcode 反轉連結串列LeetCode
- TypeScript 實現連結串列反轉TypeScript
- 1025 反轉連結串列
- 資料結構和演算法——Go實現單連結串列並且反轉單連結串列資料結構演算法Go
- 連結串列面試題(七)---合併兩個有序連結串列面試題
- Java資料結構和演算法(六)—演算法—反轉連結串列Java資料結構演算法
- java 反轉單連結串列,偶爾會遇到的面試題Java面試題
- 牛客網高頻演算法題系列-BM1 反轉連結串列演算法
- 資料結構之連結串列:206. 反轉連結串列資料結構
- leetcode 92 反轉連結串列ⅡLeetCode
- 演算法題中的連結串列演算法
- 連結串列面試題(十三)---求兩個都不帶環的連結串列相交的結點面試題
- 如何在Java中反轉單連結串列?Java
- 反轉連結串列(C++簡單區)C++
- 劍指offer面試16 反轉連結串列面試
- [leetcode 92] 反轉連結串列 IILeetCode
- 定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點函式
- (連結串列)連結串列的排序問題排序
- 連結串列反轉非遞迴演算法!看不懂打死我!遞迴演算法
- **203.移除連結串列元素****707.設計連結串列****206.反轉連結串列**
- 連結串列面試題(十二)---判斷兩個都不帶環的連結串列是否相交面試題
- LeetCode每日一題:反轉連結串列(No.206)LeetCode每日一題
- LeetCode題解(Offer24):反轉連結串列(Python)LeetCodePython