**
已知乙個複雜的鍊錶,節點中有乙個指向本鍊錶任意某個節點的
隨機指標(也可以為空),求這個鍊錶的深度拷貝。
#include
#include
#include
struct randomlistnode};
class
solution
~solution()
randomlistnode*
copyrandomlist
(randomlistnode* head)
node_vec.
push_back(0
);ptr = head;
i =0;
while
(ptr)
ptr = ptr-
>next;
i++;}
return node_vec[0]
;}};
intmain()
else
head = head-
>next;
}return0;
}
執行結果
label=1 rand=3
label=2 rand=4
label=3 rand=3
label=4 rand=null
label=5 rand=4
**輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用否則判題程式會直接返回空)
# -*- coding:utf-8 -*-
class
randomlistnode
:def
__init__
(self, x)
: self.label = x
self.
next
=none
self.random =
none
class
solution
:def
clone
(self,phead)
:if phead==
none
:return
none
#複製乙個一樣的node,並且新增到之前的鍊錶的每乙個node後面
ptmp=phead
while ptmp:
node=randomlistnode(ptmp.label)
node.
next
=ptmp.
next
ptmp.
next
=node
ptmp=node.
next
#實現新建的node的random的指向
ptmp=phead
while ptmp:
if ptmp.random:
ptmp.
next
.random=ptmp.random.
next
ptmp=ptmp.
next
.next
#斷開原來的node和新的node之間的鏈結
ptmp=phead
newhead=phead.
next
pnewtmp=phead.
next
while ptmp:
ptmp.
next
=ptmp.
next
.next
if pnewtmp.
next
: pnewtmp.
next
=pnewtmp.
next
.next
pnewtmp=pnewtmp.
next
ptmp=ptmp.
next
return newhead
複雜鍊錶的深度複製
問題 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標random指向乙個隨機節點 請對此鍊錶進行深拷貝,並返回拷貝後的頭結點。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 分析 直接以乙個鍊錶上進行操作。1 對原鍊錶的每乙個節點進行深複...
C Python 鍊錶逆序 反轉鍊錶
已知煉表頭節點指標head,將鍊錶逆序。不可申請額外空間 include struct listnode 建構函式 class solution solution listnode reverselist listnode head return new head 返回新煉表頭節點 method 2...
鍊錶 複雜鍊錶的複製
問題描述 請實現函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個next指標指向下乙個結點之外,還有乙個random指向鍊錶中的任意結點或者null。結點的定義如下 struct randomlistnod...