leetcode 面試題35 複雜鍊錶的複製

2021-10-05 19:25:13 字數 1247 閱讀 2434

解題思路:因為每個節點都會隨機指向另乙個節點,被指向的節點可能是之前出現過的節點,也可能還沒出現,為了能判斷這個節點是否已經被建立,我們用乙個雜湊表來儲存原來鍊錶中的節點和新節點的對應關係,如果原來節點已經在表中,那說明對應的新節點也已經建立過了,我們直接令指標指向它即可,如果原來節點沒有出現在表中,就新建立乙個新節點,並將這對節點新增到表中

"""

# 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.在原始鍊錶上擴充新的鍊...