复杂链表的复制(python)

一:问题描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

二,分析

先举个栗子,有如下链表,每个节点除了指向下个节点的next指针,还有一个random指针,其中,3的random指针指向他自己

我们先做一个指针,叫kk,让他指向头节点

kk=pHead

如果kk不为空,就复制一个出来,叫他node

node=RandomListNode(kk.label)

 

 

用next指针连接起node和kk以及kk.next

node.next=kk.next

kk.next=node

 

 下一个

kk=node.next

直到复制了链表中的所有结点,并用next将他们连接起来

 

 第二步,复制random指针

1结点的random指向5

复制出来的1的random就该指向复制出来的5

此时,复制出来的5是原来的5的下一项

kk.random.next=kk.next.random

 

 

one by one直到全部复制完成

 

 第三步,分离两个链表

再做两个新的指针,一个叫ee,指向新链表的表头,就放那不动,等着输出

一个叫nn,他负责遍历新链表,而kk负责遍历旧的链表

让旧的指向旧的,新的指向新的

kk.next=kk.next.next

nn.next=nn.next.next

最后输出ee

 

 

 

 结束

三,代码

 

 

 

posted @ 2020-06-23 17:37  董不耀  阅读(231)  评论(0编辑  收藏  举报