題目:請實現乙個函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個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...