標籤:style blog http color io div 演算法 new
Copy List with Random Pointer
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.
劍指offer中的原題
演算法思路:
遍曆原list的每一個節點,對每一個節點產生一個copy節點,插到原節點的後面。完成next的拷貝
第二遍掃描,對每一個原節點的random節點,其copy節點的random應該為原節點random.next。完成random的拷貝
第三遍掃描,將copy list取下來。
【注意】:分解原list和copy list時候,要完整的把原list給組裝起來。不能破壞原list的結構。
1 public class Solution { 2 public RandomListNode copyRandomList(RandomListNode head) { 3 if(head == null) return null; 4 RandomListNode node = head; 5 while(node != null){ 6 RandomListNode tem = new RandomListNode(node.label); 7 tem.next = node.next; 8 node.next = tem; 9 node = node.next.next;10 }11 node = head;12 while(node != null){13 RandomListNode next = node.next;14 if(node.random != null)15 next.random = node.random.next;16 node = node.next.next;17 }18 RandomListNode hhead = new RandomListNode(0);19 RandomListNode pointer = hhead;20 node = head;21 while(node != null){22 pointer.next = node.next;23 pointer = node.next;24 node.next = node.next.next;25 node = node.next;26 }27 return hhead.next;28 }29 }