您的位置:首页 > 运维架构

leetcode 149: Copy List with Random Pointer

2014-06-26 09:05 441 查看

Copy List with Random Pointer

Total Accepted: 12884
Total Submissions: 56931

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.

w/o extra space.

/**
* 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 p = head;
while(p!=null) {
RandomListNode np = new RandomListNode(p.label);
np.next = p.next;
p.next = np;
p = np.next;
}

p = head;
while(p!=null) {
p.next.random = p.random==null ? null : p.random.next;
p = p.next.next;
}

RandomListNode nhead = head.next;
p = head;
RandomListNode q = nhead;

while(p!=null) {    // q.next !=null won't work, since it won't deal with one node situation.
p.next = q.next;
if(q.next!=null) q.next = q.next.next;
p = p.next;
q = q.next;
}

return nhead;
}
}


w/ extra space.

/**
* 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) {
HashMap<RandomListNode, RandomListNode> map = new HashMap<RandomListNode, RandomListNode>();
RandomListNode p = head;

while(p != null) {
RandomListNode newp = new RandomListNode(p.label);
map.put(p, newp);
p = p.next;
}

// RandomListNode newHead = map.get(head);
p = head;
while(p!=null) {
RandomListNode q = map.get(p);
q.next = map.get( p.next );
q.random = map.get(p.random);
p = p.next;
}

return map.get(head);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: