劍指offer 之複雜鍊錶的複製

2021-10-09 05:17:21 字數 1602 閱讀 9028

"""

複雜鍊錶的複製

思路:1.先迴圈一遍,把原鍊錶的各個元素複製一遍連成串

2.再迴圈一遍,複製原鍊錶的隨機指標,在新鍊錶中指向對應元素

3.最後迴圈一遍,把原煉表和新鍊錶解鏈

"""# -*- coding:utf-8 -*-

class

randomlistnode

:def

__init__

(self, x)

: self.label = x

self.

next

=none

self.random =

none

class

solution

:# 返回 randomlistnode

defclone

(self, phead)

:# write code here

# 判斷空鍊錶情況

ifnot phead:

return phead

cur = phead

while cur:

# 生成新的結點元素

node = randomlistnode(cur.label)

# 讓新的結點元素指向原煉表頭結點的下乙個結點

node.

next

= cur.

next

# 將原鍊錶的頭結點指向新鍊錶的頭結點

cur.

next

= node

# 原煉表頭結點後移

cur = node.

next

cur = phead

while cur:

# 判斷原鍊錶的結點是否有隨機結點

if cur.random:

# 原煉表中結點的下乙個結點即是新鍊錶的結點

# 新鍊錶的隨機結點即是原煉表中隨機結點的下乙個結點

cur.

next

.random = cur.random.

next

# 原鍊錶後移,中間隔著新鍊錶結點,所以需要後移兩步

cur = cur.

next

.next

cur = phead

new_head = phead.

next

new_cur = phead.

next

while cur:

# 將原鍊錶的結點依次指向原鍊錶的下乙個結點

cur.

next

= cur.

next

.next

# 判斷新鍊錶是否有下乙個結點

if new_cur.

next

:# 將新鍊錶的結點依次指向新鍊錶的下乙個結點

new_cur.

next

= new_cur.

next

.next

# 新鍊錶後移

new_cur = new_cur.

next

# 原鍊錶後移

cur = cur.

next

return new_head

劍指Offer之 複雜鍊錶的複製

複雜鍊錶中,每個結點除了有乙個m pnext指標指向下乙個結點外,還有乙個m psibling指向鍊錶中的任意結點或者null。實現乙個函式可以複製這個複雜鍊錶。先正常複製乙個結點,並把這個複製的結點置於當前結點後面。其後,再複製鍊錶結點的m psibling指標,由前乙個結點求出它的m psibl...

劍指Offer之複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 鍊錶的結構大體如下 真正的難點在於怎樣複製這個random的結構。參考了dalao提出的思...

(十八)劍指offer之複雜鍊錶的複製

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意 輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空。struct randomlistnode class solution pri...