138. Copy List with Random Pointer
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
题意:
给出了一个链表,每个节点包含一个额外的随机指针,它可以指向列表中的任意节点或NULL。
返回链表的深层拷贝。
思路:
如果是简单的copy List 的话,那么我们只需要从头到尾遍历下来,new出对应个数的Node,并把它们的连接关系设置好就可以了,但是这道题目中每个节点Node出现了Random属性,也就意味着可能当前结点Node所依赖的那个Random对应的结点还没有被创建出来。
主要做如下三步处理:
- 在OldList中的每个结点后,插入一个CopyNode,这个结点的Random域为空,Next域指向OldList节点的下一个需要复制的节点。
- 由于所有的CopyNode都已经创建出来了,我们就可以调整这些CopyNode真正的Random域的值了,oldItr->next->random = oldItr->random->next;。
- 调整所有CopyNode的Next域的值,恢复OldList所有Node的Next的值到初始状态,特别注意,要恢复原链表
图解
1 | struct RandomListNode { |