Copy List with Random Pointer
也可以不用HashMap。public class Solution {
public RandomListNode copyRandomList(RandomListNode head) {
if(head == null) return null;
RandomListNode newHead = new RandomListNode(head.label);
HashMap<RandomListNode, RandomListNode> map = new HashMap<RandomListNode, RandomListNode>();
map.put(head, newHead);
for(RandomListNode node = head; node.next != null; node = node.next) {
RandomListNode newNext = new RandomListNode(node.next.label);
map.get(node).next = newNext;
map.put(node.next, newNext);
}
for(RandomListNode node = head; node != null; node = node.next) {
map.get(node).random = map.get(node.random);
}
return newHead;
}
}
public class Solution {
public RandomListNode copyRandomList(RandomListNode head) {
if(head == null) return null;
for(RandomListNode node = head; node != null; node = node.next.next) {
RandomListNode newNode = new RandomListNode(node.label);
newNode.next = node.next;
node.next = newNode;
}
for(RandomListNode node = head; node != null; node = node.next.next) {
if(node.random != null) {
node.next.random = node.random.next; //这一步是精华}
}
RandomListNode newHead = head.next;
for(RandomListNode node = head, newNode = newHead; node != null; node = node.next) {
node.next = newNode.next;
if(newNode.next != null) {
newNode.next = newNode.next.next;
}
newNode = newNode.next; //别忘了newNode也要往后走一步!}
return newHead;
}
}

浙公网安备 33010602011771号