原题地址:https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list/submissions/
题目描述:
您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。
扁平化列表,使所有结点出现在单级双链表中。您将获得列表第一级的头部。
示例:
输入:
1---2---3---4---5---6--NULL
|
7---8---9---10--NULL
|
11--12--NULL
输出:
1-2-3-7-8-11-12-9-10-4-5-6-NULL
以上示例的说明:
给出以下多级双向链表:
解题方案:
链表操作的题型,没啥难度:
"""
# Definition for a Node.
class Node:
def __init__(self, val, prev, next, child):
self.val = val
self.prev = prev
self.next = next
self.child = child
"""
class Solution:
def flatten(self, head: 'Node') -> 'Node':
p = head
s = []
while p:
if p.child:
if p.next is not None:
s.append(p.next)
p.next = p.child
p.child = None
p.next.prev = p
if p.next is None and len(s) > 0:
p.next = s.pop()
p.next.prev = p
p = p.next
return head
"""
# Definition for a Node.
class Node:
def __init__(self, val, prev, next, child):
self.val = val
self.prev = prev
self.next = next
self.child = child
"""
class Solution:
def flatten(self, head: 'Node') -> 'Node':
stack = [head] if head else None
p = None
while stack:
node = stack.pop()
if node.next:
stack.append(node.next)
if node.child:
stack.append(node.child)
if p:
p.next = node
node.prev = p
p.child = node.child = None
p = node
return head
这个方法比我的简单明朗嗷