leetcode 149: Copy List with Random Pointer

来源:互联网 发布:科学计算 python 编辑:程序博客网 时间:2024/06/13 03:57

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);    }}


0 0
原创粉丝点击