这道题目以前见过,所以想了一下就想出来了http://www.cnblogs.com/lautsie/p/3259724.html。就是先修改指针维护一个从原先节点到新建节点的关系,最后再改回去。
实现过程中,一度忘记把node往前更新了。
public class Solution { public RandomListNode copyRandomList(RandomListNode head) { if (head == null) return null; RandomListNode node = head; // copy node and change the structure while (node != null) { RandomListNode copyNode = new RandomListNode(node.label); copyNode.next = node.next; node.next = copyNode; node = copyNode.next; } node = head; while (node != null) { node.next.random = node.random == null ? null : node.random.next; node = node.next.next; } // re-build the structure node = head; RandomListNode copyHead = head.next; while (node != null) { RandomListNode copyNode = node.next; node.next = copyNode.next; copyNode.next = node.next == null ? null : node.next.next; node = node.next; } return copyHead; } }