複雜鍊錶的複製 python編寫

2022-03-22 06:45:13 字數 2340 閱讀 2461

題目描述

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

題目分析

1.如果鍊錶為空鍊錶,則返回本身即可

2.如果非空 需要進行複製操作,如果沒有特殊指標,只需要複製next我相信大家都能很快做出來,但是加上特殊指標這就需要一定技巧,因為特殊指標隨便指,而你每次找特殊指標所指的節點都需要從頭開始遍歷找起,這顯然複雜度高達o(n²)

下面介紹乙個巧妙地思想方法:

如圖 首先第一步 複製原來的鍊錶,順次連線形成新鍊錶

clonode = phead

while clonode:

#完成第一步的核心操作

node = randomlistnode(clonode.label)

node.next = clonode.next

clonode.next = node

clonode = node.next #下一次操作

第二步,利用原節點的random指向,來用複製的相應節點的random

node = clonode.next #指向複製的結點

if clonode.random: #如果原節點有特殊指標

node.random = clonode.random.next #則複製的節點的特殊指標指向原節點的特殊指標指向的下乙個值 看圖更好理解一些

clonode = node.next

最後一步,將複製好的鍊錶拆分出來,或者說將 偶數字的節點重新拆分合成新的鍊錶,得到的就是複製的鍊錶

#完成第三步的核心操作 此時節點指向隔了乙個節點的節點

node = clonode.next

clonode.next = node.next

clonode = node #下乙個節點的操作

這個操作其實就是將兩個鍊錶順次全都拆分出來,乙個很關鍵的步驟 phead = phead.next 如果沒有這句話,最後得到的phead就是原鍊錶的開頭了。

總程式如下:

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

# class randomlistnode:

# def __init__(self, x):

# self.label = x

# self.next = none

# self.random = none

class solution:

# 返回 randomlistnode

def clone(self, phead):

# write code here

if not phead:

return phead

clonode = phead

while clonode:

node = randomlistnode(clonode.label)

node.next = clonode.next

clonode.next = node

clonode = node.next

clonode = phead

while clonode:

node = clonode.next

if clonode.random:

node.random = clonode.random.next

clonode = node.next

clonode = phead

phead = phead.next

while clonode.next:

node = clonode.next

clonode.next = node.next

clonode = node

return phead

鍊錶 複雜鍊錶的複製

問題描述 請實現函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個next指標指向下乙個結點之外,還有乙個random指向鍊錶中的任意結點或者null。結點的定義如下 struct randomlistnod...

35 複雜鍊錶的複製 python

題目 請實現乙個函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個m pnext指標指向下乙個節點,還有乙個m psibling指標指向鍊錶中的任意節點或者nullptr。def complex list clone head node node if not head return none...

複雜鍊錶複製

複雜鍊錶複製的標頭檔案mlist.h ifndef mlist h define mlist h include include includetypedef int datatype typedef struct node node,pnode,plist pnode crealist datat...