35 複雜鍊錶的複製 python

2021-10-04 23:45:34 字數 1043 閱讀 3916

題目:請實現乙個函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個m_pnext指標指向下乙個節點,還有乙個m_psibling指標指向鍊錶中的任意節點或者nullptr。

def complex_list_clone(head):

node = node()

if not head:

return none

if not head.next:

return node.add(head.data)

p = head

# 複製節點,接在原節點後面

while p:

pnode = node.add(p.data)

pnode.next = p.next

pnode.pnext = p.pnext

p.next = pnode

p = p.next.next

q = head.next

# return head

while q:

if q.pnext:

q.pnext = q.pnext.next

if not q.next:

break

q=q.next.next

q = head.next

while q:

q.next = q.next.next

q = q.next

if not q.next:

break

return head.next

注:第一種方法:暴力複製。先根據鍊錶中m_pnext,複製完整條鍊錶。然後遍歷原鍊錶每個節點m_psibling,由於要先確定m_psibling的位置,所以每個節點尋找m_psibling的節點,都要先從頭節點開始遍歷,時間複雜度為o(n2)

第二種方法:遍歷原鍊錶,將每個節點複製的鍊錶直接連到相應節點的後面,使原鍊錶和複製後的鍊錶混在一起。第二次遍歷確定複製鍊錶的節點m_psibling,即為原節點m_psibling的m_pnext節點。第三次遍歷,將複製的節點提出來p.next = p.next.next。

35 複雜鍊錶的複製

請實現copyrandomlist函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個next指標指向下乙個節點,還有乙個random指標指向鍊錶中的任意節點或者null。示例 1 輸入 head 7,null 13,0 11,4 10,2 1,0 輸出 7,null 13,0 11,4 10,...

35 鍊錶 複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 2 重新遍歷鍊錶,複製老結點的隨機指標給新結點,如a1.random a.random.n...

35題複雜鍊錶的複製

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