使用python帶你解決鍊錶深拷貝

2021-10-06 16:21:53 字數 1951 閱讀 9911

題目描述

輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標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指向乙個隨機節點 請對此鍊錶進行深拷貝,並返回拷貝後的頭結點。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 看完題目應該很混亂,甚至還有點看不懂。題目解析 看上面的,題...