複雜鍊錶的複製

2021-10-06 23:13:49 字數 2050 閱讀 1793

輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標random指向乙個隨機節點),請對此鍊錶進行深拷貝,並返回拷貝後的頭結點。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)

思路:1、暴力破解。先複製出主鍊錶,然後複製從頭複製random結點

2、map對映。

/*

struct randomlistnode

};*/

class

solution

// 要複製的結點

randomlistnode *phead1 = phead;

// 建立複製後的首結點

randomlistnode *ph =

(randomlistnode *

)malloc

(sizeof

(randomlistnode));

// 宣告指標指向複製後的首結點

randomlistnode *p1 = ph;

// 計算結點的個數

int num =1;

// 複製完next鏈

while

(phead1-

>next)

p1->label = phead1-

>label;

p1->next =

null

;// 改變新結點的random指標

phead1 = phead;

p1 = ph;

while

(phead1)

// 新煉表中找到指定結點

randomlistnode *p = ph;

for(

int i =

0; i < num - n; i++

) p1-

>random = p;

p1 = p1-

>next;

phead1 = phead1-

>next;

}return ph;}}

;

使用對映關係,將每個結點的random對映儲存在字典中

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

# class randomlistnode:

# def __init__(self, x):

# self.label = x

# self.next = none

# self.random = none

class

solution

:# 返回 randomlistnode

defclone

(self, phead)

:# write code here

p1 = phead

nodes =

d =while p1:

p1 = p1.

next

p1 = phead

while p1:

if p1.random:

d[nodes.index(p1)

]= nodes.index(p1.random)

else

: d[nodes.index(p1)]=

-1p1 = p1.

next

new_nodes =

[randomlistnode(x.label)

for x in nodes]

for i, node in

enumerate

(new_nodes)

:if i <

len(new_nodes)-1

: node.

next

= new_nodes[i+1]

if d[i]!=-

1:node.random = new_nodes[d[i]

]return new_nodes[0]

if new_nodes else

none

鍊錶 複雜鍊錶的複製

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

複雜鍊錶複製

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

複製複雜鍊錶

題目 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路 首先有三種解法 第一種就是中規中矩的解法,首先複製next指標的節點,之後...