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.
?
/**
* 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) {
if (head == null) {
return null;
}
RandomListNode copy = head;
while (copy != null) {
RandomListNode node = new RandomListNode(copy.label);
node.next = copy.next;
copy.next = node;
copy = node.next;
}
copy = head;
while (copy!=null && copy.next!=null) {
if (copy.random != null) {
copy.next.random = copy.random.next;
}
copy = copy.next.next;
}
copy = head;
RandomListNode cur = copy.next;
RandomListNode tmp = cur;
while (copy!=null && tmp!=null) {
copy.next = tmp.next;
copy = copy.next;
if (tmp.next != null) {
tmp.next = tmp.next.next;
}
tmp = tmp.next;
}
return cur;
}
}
?
原文:http://hcx2013.iteye.com/blog/2219525