輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
思路:
1.先複製鍊錶節點的值放在原來的節點後面,組成乙個新的鍊錶
2.處理複雜指標:安排複製節點的複雜指標指向 原始節點複雜指標指向的下乙個
3.拆分這個鍊錶,偶數節點為原鍊錶,奇數節點為複製鍊錶。
要注意的是鍊錶最後尾節點需要指向none否則牛客網不能通過
class randomlistnode:
def __init__(self,x):
self.val = x
self.next = none
self.random = none
class solution:
def clone(self,phead):
if phead ==none:
return none
self.clonenodes(phead)
self.randomnodes(phead)
return self.reconnctnodes(phead)
# 將複製的鍊錶節點在其原始節點的後面
def clonenodes(self,phead):
pnode = phead
while pnode:
pcloned = randomlistnode(0)
pcloned.val = pnode.val
pcloned.next = pnode.next
pnode.next = pcloned
pnode = pcloned.next
# 安排複製節點的複雜指標 指向 原始節點指標的後乙個
def randomnodes(self,phead):
pnode = phead
while pnode:
pcloned = pnode.next
if pnode.random != none:
pcloned.random = pnode.random.next
pnode = pcloned.next
# 拆成兩個鍊錶
def reconnctnodes(self,phead):
# 第一種做法
pnode = phead
pclonedhead = pclonednode = phead.next
while pnode.next.next:
pclonednode.next = pnode.next.next
pnode = pnode.next
pclonednode = pclonednode.next
pnode.next = none #這裡要保證尾結點指向none 否則不能通過
return pclonedhead
# """第二種做法"""
# pnode = phead
# pclonedhead = pclonednode = phead.next
# pnode.next = pclonedhead.next
# pnode = pnode.next
# while pnode:
# pclonednode.next = pnode.next
# pclonednode = pclonednode.next
# pnode.next = pclonednode.next
# pnode = pnode.next
# return pclonedhead
if __name__ == '__main__':
node1 = randomlistnode(1)
node2 = randomlistnode(2)
node3 = randomlistnode(3)
node1.next = node2
node2.next = node3
node1.random = node3
node2.random = node1
s = solution()
clonenode = s.clone(node1)
print(clonenode.next.random.val)
劍指Offer 35 複雜鍊錶的複製
請實現啊函式complexlistnode clone complexlistnode phead 複製乙個 複雜鍊錶。在複雜鍊錶中除了有乙個m pnext指標指向下乙個節點,還有乙個m psaibling 指標指向鍊錶中的任意節點或者nullptr。節點定義如下 class complexlist...
劍指offer35 複雜鍊錶的複製
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 剛開始看題時還有點摸不著頭腦,感覺這道題沒有任何存在的意義。後來看了大家的討論才明白。思想...
劍指offer 35 複雜鍊錶的複製
面試題35.複雜鍊錶的複製 難度中等33 請實現 copyrandomlist 函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個 next 指標指向下乙個節點,還有乙個 random 指標指向鍊錶中的任意節點或者 null。示例 1 輸入 head 7,null 13,0 11,4 10,2...