題目描述
輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標random指向乙個隨機節點),請對此鍊錶進行深拷貝,並返回拷貝後的頭結點。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
解題思路:先把原鍊錶進行複製,將複製的節點加在原節點的後面,鏈結起來;將複製節點的random指標指向原節點的random指標,a.next.random = a.random.next,最後再斷開原先的鏈結,從新鏈結就可以了
從上面圖中就可以看出具體的思路
ok,**
class
randomlistnode
:def
__init__
(self, x)
: self.label = x
self.
next
=none
self.random =
none
class
solution
:def
clone
(self, phead):if
not phead:
return
none
#新增複製的node
ptmp = phead
while ptmp:
node = randomlistnode(ptmp.label)
#建立乙個和之前鍊錶一樣的鍊錶
node.
next
= ptmp.
next
#將原來的next賦給node的next
ptmp.
next
= node #原來的節點鏈結到複製的節點
ptmp = node.
next
##繼續向前走,此處是node的next,而不是ptmp.next,因為此時ptmp.next是node了
#實現新建node的random的指標
ptmp = phead
while ptmp:
copynode = ptmp.
next
ptmp_random = ptmp.random
if ptmp.random:
copynode.random = ptmp_random.
next
ptmp = copynode.
next
#斷開鏈結
ptmp = phead
newhead = phead.
next
pnewtmp = phead.
next
while ptmp:
ptmp.
next
= ptmp.
next
.next
#這裡需要判斷一下邊界條件
if pnewtmp.
next
: pnewtmp.
next
= pnewtmp.
next
.next
pnewtmp = pnewtmp.
next
ptmp = ptmp.
next
return newhead
l1 = randomlistnode(1)
l1.next
= randomlistnode(2)
l1.next
.next
= randomlistnode(3)
test = solution(
)test.clone(l1)
.label
1
Python帶你走進鍊錶的世界
a 1 2,3 4 for i in range len a print id a i if i len a 1 break print id a i 1 id a i 下面是最終的執行結果 140722440987280 32140722440987312 32140722440987344 32...
隨機指標鍊錶深拷貝
題目描述給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。要求返回這個鍊錶的 深拷貝。我們用乙個由 n 個節點組成的鍊錶來表示輸入 輸出中的鍊錶。每個節點用乙個 val,random index 表示 val 乙個表示 node.val 的整數。random ...
複雜鍊錶的深拷貝
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標random指向乙個隨機節點 請對此鍊錶進行深拷貝,並返回拷貝後的頭結點。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 看完題目應該很混亂,甚至還有點看不懂。題目解析 看上面的,題...