复杂链表的复制(python)

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

二,分析

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

复杂链表的复制(python)_第1张图片

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

kk=pHead

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

node=RandomListNode(kk.label)

复杂链表的复制(python)_第2张图片

 

 

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

node.next=kk.next

kk.next=node

复杂链表的复制(python)_第3张图片

 

 下一个

kk=node.next

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

复杂链表的复制(python)_第4张图片

 

 第二步,复制random指针

1结点的random指向5

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

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

kk.random.next=kk.next.random

复杂链表的复制(python)_第5张图片

 

 

one by one直到全部复制完成

复杂链表的复制(python)_第6张图片

 

 第三步,分离两个链表

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

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

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

kk.next=kk.next.next

nn.next=nn.next.next

最后输出ee

复杂链表的复制(python)_第7张图片

 

 复杂链表的复制(python)_第8张图片

 

 结束

三,代码

复杂链表的复制(python)_第9张图片

 

 复杂链表的复制(python)_第10张图片

 

你可能感兴趣的:(复杂链表的复制(python))