Leetcode Copy List with Random Pointer 拷贝链表

来源:互联网 发布:滇红 知乎 编辑:程序博客网 时间:2024/06/16 19:30


题目:


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.


分析:


1. 遍历链表,拷贝链表的每一个节点,并用HashMap记录原来的节点和拷贝的节点的对应关系。

2. 再次遍历链表,把拷贝的节点连接起来,并加上random节点的关系。


Java代码实现:


/** * 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 head;                    HashMap<RandomListNode, RandomListNode> nodes = new HashMap<RandomListNode, RandomListNode>();        RandomListNode node = head;        RandomListNode newHead = new RandomListNode(head.label);        nodes.put(node, newHead);        node = node.next;        while(node!=null)        {            nodes.put(node, new RandomListNode(node.label));            node = node.next;        }        node = head;        RandomListNode temp = newHead;        temp.random = nodes.get(node.random);        while(node!=null)        {            temp.next = nodes.get(node.next);            node = node.next;            temp = temp.next;            if(temp!=null)                temp.random = nodes.get(node.random);        }        return newHead;    }}


0 0