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,返回该list的深拷贝
思路:先复制链表中的节点,例如链表A-B-C就变成A-A-B-B-C-C,然后让复制的节点的next指向随机指针需要指向的节点,最后让原结点的随机指针指向复制结点的next对应的元素。
代码:
/**
* Definition for singly-linked list with a random pointer.
* class RandomListNode {
* int label;
* RandomListNode next, random;
* RandomListNode(int x) { this.label = x; }
* };
*/
public class Solution {
public RandomListNode copyRandomList(RandomListNode head) {
RandomListNode iter = head, next;
while(iter != null){
next = iter.next;
RandomListNode copy = new RandomListNode(iter.label);
iter.next = copy;
copy.next = next;
iter = next;
}
iter = head;
while(iter != null){
if(iter.random != null){
iter.next.random = iter.random.next;
}
iter = iter.next.next;
}
iter = head;
RandomListNode newHead = new RandomListNode(0);
RandomListNode copy, copyIter = newHead;
while(iter != null){
next = iter.next.next;
copy = iter.next;
copyIter.next = copy;
copyIter = copy;
iter.next = next;
iter = next;
}
return newHead.next;
}
}