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 92] 反轉連結串列 IILeetCode
- leetcode 反轉連結串列LeetCode
- leetcode206. 反轉連結串列LeetCode
- leetcode 206.反轉連結串列LeetCode
- leetcode 206. 反轉連結串列LeetCode
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- LeetCode-Python-(206)反轉連結串列LeetCodePython
- LeetCode-092-反轉連結串列 IILeetCode
- leetCode206 反轉連結串列ILeetCode
- 反轉連結串列
- LeetCode每日一題:反轉連結串列(No.206)LeetCode每日一題
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- 1025 反轉連結串列
- 264反轉連結串列
- LeetCode題解(Offer24):反轉連結串列(Python)LeetCodePython
- 連結串列反轉問題
- 206. 反轉連結串列
- 資料結構之連結串列:206. 反轉連結串列資料結構
- 反轉連結串列、合併連結串列、樹的子結構
- TypeScript 實現連結串列反轉TypeScript
- 反轉一個單連結串列。
- 反轉連結串列系列問題
- java實現連結串列反轉Java
- JZ-015-反轉連結串列
- 【Leetcode】61.旋轉連結串列LeetCode
- **203.移除連結串列元素****707.設計連結串列****206.反轉連結串列**
- 反轉連結串列(遞迴與棧)遞迴
- 反轉相鄰連結串列單元
- LeetCode 92 | 大公司常考的面試題,翻轉連結串列當中指定部分LeetCode面試題
- leetcode 61 旋轉連結串列 c++LeetCodeC++
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- Leetcode_86_分割連結串列_連結串列LeetCode
- 說了你可能不信leetcode刷題區域性連結串列反轉D92存在bug,你看了就知道了LeetCode
- 如何在Java中反轉單連結串列?Java
- 反轉連結串列(C++簡單區)C++
- 面試必備的「反轉連結串列」面試
- 劍指 Offer 24. 反轉連結串列
- 劍指 Offer 24.反轉連結串列