C Python 複雜的鍊錶的深度拷貝

2021-10-03 06:31:26 字數 2008 閱讀 6219

**

已知乙個複雜的鍊錶,節點中有乙個指向本鍊錶任意某個節點的

隨機指標(也可以為空),求這個鍊錶的深度拷貝。

#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...