每日一道Leetcode - 430. 扁平化多級雙向連結串列
參考了題解,理了下思路,本來還想著使用佇列和棧,其實沒有必要,因為他定義了三種不同型別的指標。
很巧妙的一個思路,遍歷節點,父節點的子孩子不為空,就將當前子連結串列的前節點指向父節點,遍歷子連結串列找到子連結串列的最後一個節點的後指標指向父節點本來的下一個節點。父節點的孩子節點也要設定為空,父節點本來的下一個節點也要設定prev指標指向前面的子連結串列找到的最後一個節點。
/*
// Definition for a Node.
class Node {
public int val;
public Node prev;
public Node next;
public Node child;
};
*/
class Solution {
public Node flatten(Node head) {
Node p = head;
while(p!=null){
if(p.child != null){
// 孩子節點不為空
// 記錄每個節點的兄弟連結串列 next 以及孩子連結串列 child
Node next = p.next;
Node child = p.child;
// 將當前節點的兄弟指標指向孩子,並且孩子指標設定為空
p.next = child;
p.child = null;
// 設定孩子節點的前指標為父節點p
child.prev = p;
// 遍歷孩子節點之後的連結串列,找到孩子連結串列節點的最後一個節點
while(child.next!=null){
child = child.next;
}
// 孩子連結串列遇到null, 說明當前孩子連結串列節點的下一個指向父節點的兄弟連結串列
child.next = next;
// 因為next是卡斷的,所以判斷是否為空,不為空還要為他設定前指標指向當前孩子連結串列最後一個節點
if(next!=null){
next.prev = child;
}
}
// 孩子結點為空直接向後移
// 上面的找到子連結串列操作之後也往後繼續遍歷找子連結串列處理
p = p.next;
}
return head;
}
}
相關文章
- 430. 扁平化多級雙向連結串列
- 連結串列-雙向連結串列
- 連結串列-雙向通用連結串列
- 雙向連結串列
- 連結串列-雙向非通用連結串列
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 實現雙向連結串列
- 每日leetcode——160. 相交連結串列LeetCode
- 資料結構——雙向連結串列資料結構
- 結構與演算法(03):單向連結串列和雙向連結串列演算法
- Go實現雙向連結串列Go
- java實現雙向連結串列Java
- DoublyLinkedList(雙向連結串列)——Javascript版JavaScript
- 資料結構實驗之連結串列九:雙向連結串列資料結構
- 資料結構之雙向連結串列資料結構
- 【c# .net】雙向連結串列( LinkedList )C#
- 雙向連結串列 尾節點插入
- 每日leetcode——142. 環形連結串列 IILeetCode
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 連結串列 - 單向連結串列
- 畫江湖之資料結構【第一話:連結串列】雙向連結串列資料結構
- 畫江湖之資料結構 [第一話:連結串列] 雙向連結串列資料結構
- 每天一道leetcode234-迴文連結串列LeetCode
- leetcode刷題.143. 重排連結串列.每日打卡LeetCode
- LeetCode每日一題:反轉連結串列(No.206)LeetCode每日一題
- 雙向連結串列的功能實現(初版
- LVGL雙向連結串列學習筆記筆記
- 【LeetCode】初級演算法:連結串列LeetCode演算法
- 資料結構(雙向連結串列的實現)資料結構
- 雙向連結串列————查詢、刪除、插入結點
- 資料結構-雙向連結串列(Python實現)資料結構Python
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- Leetcode_86_分割連結串列_連結串列LeetCode
- 每日leetcode——21. 合併兩個有序連結串列LeetCode
- 雙向連結串列介面設計(C語言)C語言
- LeetCode每日一題:連結串列的中間結點(No.876)LeetCode每日一題
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- LeetCode-連結串列LeetCode