"""
複雜鍊錶的複製
思路: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...