leetcode 92 反轉連結串列Ⅱ
這道題是我小米麵試時手撕的一道題,當時沒撕出來QAQ,太慘了,只能下定決心好好搞演算法,面試官還問我怎麼沒刷到這個題。。。。我是真沒刷到這道題,反轉單連結串列倒是熟的不行。反轉連結串列真的是高頻考點,得好好看各種變種題。
反轉從位置 m 到 n 的連結串列。請使用一趟掃描完成反轉。
說明
1 ≤ m ≤ n ≤ 連結串列長度。
示例:
輸入: 1->2->3->4->5->NULL, m = 2, n = 4
輸出: 1->4->3->2->5->NULL
解題思路:
反轉思路和反轉單連結串列得思路差不多,問題在於邊界得判斷。解題步驟如下:
- 找到反轉部分的起點即m點,以及前面的那個節點,用兩個指標con和tail儲存。con需要連線到n節點,pre成為反轉後的頭
- 三指標法(pre,cur,suf)反轉連結串列,直到pre==n,此時,另外cur指向n後面的節點,將反轉後的尾節點tail指向cur,反轉完畢
值得注意的一點:在尋找m的前一個節點時,迴圈的邊界條件不好確定,容易亂,比如m=2時,如果從頭節點開始遍歷,此時頭節點就是m的前一個節點,不好設定邊界。因此,引入啞節點,則尋找起來更加容易。
程式碼:
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode* Node = new ListNode(-1);
Node -> next = head;
ListNode* pre = Node;
ListNode* cur;
for (int i = 1; i < m; i++) {
pre = pre -> next; //尋找m的前一個節點
}
cur = pre -> next; //反轉的起點,也是反轉後的尾點
ListNode* con = pre;
ListNode* tail = cur; //儲存兩個節點
ListNode* suf;
for (int i = m; i <= n; i++) { //反轉[m,n]之間的連結串列
suf = cur -> next;
cur -> next = pre;
pre = cur;
cur = suf;
}
if (con) {
con -> next = pre; //如果不是從頭開始反轉
}
tail -> next = cur;
return Node -> next;
}
};
相關文章
- leetcode 反轉連結串列LeetCode
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 反轉連結串列
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- leetcode 206.反轉連結串列LeetCode
- LeetCode-092-反轉連結串列 IILeetCode
- leetcode206. 反轉連結串列LeetCode
- leetCode206 反轉連結串列ILeetCode
- JavaScript從反轉陣列到連結串列反轉JavaScript陣列
- LeetCode-Python-(206)反轉連結串列LeetCodePython
- 反轉連結串列、合併連結串列、樹的子結構
- java實現連結串列反轉Java
- TypeScript 實現連結串列反轉TypeScript
- 1025 反轉連結串列
- LeetCode每日一題:反轉連結串列(No.206)LeetCode每日一題
- LeetCode題解(Offer24):反轉連結串列(Python)LeetCodePython
- 資料結構之連結串列:206. 反轉連結串列資料結構
- 面試必備的「反轉連結串列」面試
- 如何在Java中反轉單連結串列?Java
- 反轉連結串列(C++簡單區)C++
- 劍指offer面試16 反轉連結串列面試
- LeetCode 92 | 大公司常考的面試題,翻轉連結串列當中指定部分LeetCode面試題
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- 【Leetcode】61.旋轉連結串列LeetCode
- 說了你可能不信leetcode刷題區域性連結串列反轉D92存在bug,你看了就知道了LeetCode
- [每日一題] 第二題:反轉連結串列每日一題
- Java單連結串列反轉圖文詳解Java
- 定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點函式
- 演算法題:反轉一個單連結串列&判斷連結串列是否有環演算法
- leetcode 61 旋轉連結串列 c++LeetCodeC++
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- LeetCode-連結串列LeetCode
- 【C++】“反轉連結串列”相關的題目C++
- java不用api實現單連結串列反轉(二)JavaAPI
- 資料結構和演算法——Go實現單連結串列並且反轉單連結串列資料結構演算法Go
- 【演算法題】反轉連結串列的兩種方法演算法