解題思路:因為每個節點都會隨機指向另乙個節點,被指向的節點可能是之前出現過的節點,也可能還沒出現,為了能判斷這個節點是否已經被建立,我們用乙個雜湊表來儲存原來鍊錶中的節點和新節點的對應關係,如果原來節點已經在表中,那說明對應的新節點也已經建立過了,我們直接令指標指向它即可,如果原來節點沒有出現在表中,就新建立乙個新節點,並將這對節點新增到表中
"""
# definition for a node.
class node:
def __init__(self, x: int, next: 'node' = none, random: 'node' = none):
self.val = int(x)
self.next = next
self.random = random
"""class
solution
:def
copyrandomlist
(self, head:
'node')-
>
'node'
:if head is
none
:return
none
root = node(head.val)
p2 = root
ori_copy =
p1 = head
while
(p1)
:if p1.
next
and p1.
next
notin ori_copy:
cur = node(p1.
next
.val)
ori_copy[p1.
next
]= cur
if p1.random and p1.random not
in ori_copy:
cur = node(p1.random.val)
ori_copy[p1.random]
= cur
if p1.
next
: p2.
next
= ori_copy[p1.
next
]if p1.random:
p2.random = ori_copy[p1.random]
p2 = p2.
next
p1 = p1.
next
return root
複雜鍊錶的複製(Leetcode面試題35)
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標 指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 struct randomlistnode class solution creatne...
面試題35 複雜鍊錶的複製
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 方法一 三步 struct randomlistnode class solut...
面試題35 複雜鍊錶的複製
一 題目 請實現函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個m pnext指標指向下乙個結點外,還有乙個m psibling 指向鍊錶中的任意結點或者nullptr。二 關鍵 1.在原始鍊錶上擴充新的鍊...