每日一道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;
}
}
相關文章
- 連結串列-雙向連結串列
- 雙向連結串列
- javascript中的連結串列結構—雙向連結串列JavaScript
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 實現雙向連結串列
- 資料結構——雙向連結串列資料結構
- 資料結構:雙向連結串列資料結構
- 結構與演算法(03):單向連結串列和雙向連結串列演算法
- Go實現雙向連結串列Go
- java實現雙向連結串列Java
- C語言之雙向連結串列C語言
- 資料結構實驗之連結串列九:雙向連結串列資料結構
- 資料結構之雙向連結串列資料結構
- Java雙向連結串列的實現Java
- DoublyLinkedList(雙向連結串列)——Javascript版JavaScript
- 雙向連結串列 尾節點插入
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 畫江湖之資料結構【第一話:連結串列】雙向連結串列資料結構
- 畫江湖之資料結構 [第一話:連結串列] 雙向連結串列資料結構
- C++實現通用雙向連結串列C++
- 把BST轉換為雙向連結串列
- 雙向連結串列的建立及基本操作
- 雙向連結串列的功能實現(初版
- 【c# .net】雙向連結串列( LinkedList )C#
- 每日leetcode——160. 相交連結串列LeetCode
- Linux 核心資料結構:雙向連結串列Linux資料結構
- 雙向連結串列————查詢、刪除、插入結點
- 資料結構(雙向連結串列的實現)資料結構
- JAVA基礎:語言中連結串列和雙向連結串列的實現(轉)Java
- LVGL雙向連結串列學習筆記筆記
- 雙向連結串列的操作(插入和刪除)
- 雙向連結串列介面設計(C語言)C語言
- 資料結構-雙向連結串列(Python實現)資料結構Python
- 每日leetcode——142. 環形連結串列 IILeetCode
- MYSQL INNODB 中通用雙向連結串列的實現MySql
- 雙向迴圈連結串列的介面設計(初版
- 資料結構學習(C++)——雙向連結串列 (轉)資料結構C++
- 雙向迴圈連結串列————遍歷、查詢、插入結點