【演算法題】反轉連結串列的兩種方法
反轉單連結串列的兩種辦法
方法一:
首先,建立一個與五個元素的單連結串列,定義三個指標,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
- 1025 反轉連結串列
- 264反轉連結串列
- leetcode 反轉連結串列LeetCode
- 每日演算法隨筆:反轉連結串列演算法
- [每日一題] 第二題:反轉連結串列每日一題
- 反轉連結串列、合併連結串列、樹的子結構
- 【C++】“反轉連結串列”相關的題目C++
- leetcode 92 反轉連結串列ⅡLeetCode
- 206. 反轉連結串列
- 演算法入門題:如何反轉一個單向連結串列?演算法
- LeetCode每日一題:反轉連結串列(No.206)LeetCode每日一題
- 反轉連結串列系列題練習遞迴遞迴
- 資料結構之連結串列:206. 反轉連結串列資料結構
- TypeScript 實現連結串列反轉TypeScript
- 反轉一個單連結串列。
- leetcode206. 反轉連結串列LeetCode
- java實現連結串列反轉Java
- leetcode 206.反轉連結串列LeetCode
- [leetcode 92] 反轉連結串列 IILeetCode
- leetcode 206. 反轉連結串列LeetCode
- JZ-015-反轉連結串列
- LeetCode題解(Offer24):反轉連結串列(Python)LeetCodePython
- 面試必備的「反轉連結串列」面試
- 資料結構和演算法——Go實現單連結串列並且反轉單連結串列資料結構演算法Go
- Java資料結構和演算法(六)—演算法—反轉連結串列Java資料結構演算法
- 牛客網高頻演算法題系列-BM1 反轉連結串列演算法
- **203.移除連結串列元素****707.設計連結串列****206.反轉連結串列**
- 反轉連結串列(遞迴與棧)遞迴
- LeetCode-Python-(206)反轉連結串列LeetCodePython
- 反轉相鄰連結串列單元
- LeetCode-092-反轉連結串列 IILeetCode