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