Copy List with Random Pointer

来源:互联网 发布:软件p光头 编辑:程序博客网 时间:2024/06/07 03:56

两次遍历。

请一定要明白每次从map取出的value是啥,不要搞混啊。

对于空间为1的做法,之后看点击打开链接

/** * 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;        }        Map<RandomListNode, RandomListNode> map = new HashMap<>();        RandomListNode newHead = new RandomListNode(head.label);        map.put(head, newHead);        RandomListNode node = head.next;        RandomListNode prevCopy = newHead;        while (node != null) {            RandomListNode curCopy = new RandomListNode(node.label);            map.put(node, curCopy);            prevCopy.next = curCopy;            prevCopy = curCopy;            node = node.next;        }        node = head;          while(node!=null)          {              RandomListNode nodeCopy = map.get(node);            RandomListNode randomCopy = map.get(node.random);            if (randomCopy != null) {                nodeCopy.random = randomCopy;            }            node = node.next;        }          return newHead;                // if (head == null) {        //     return null;        // }        // Map<RandomListNode, RandomListNode> map = new HashMap<>();        // RandomListNode copyNode = new RandomListNode(head.label);        // map.put(head, copyNode);        // RandomListNode node = head.next;        // RandomListNode prevCopy = copyNode;        // while (node != null) {        //     RandomListNode curCopy = new RandomListNode(node.label);        //     map.put(node, curCopy);        //     prevCopy.next = curCopy;        //     prevCopy = curCopy;        //     node = node.next;        // }        // node = head;        // while (node != null) {        //     RandomListNode nodeCopy = map.get(node);        //     RandomListNode nodeRandom = map.get(node.random);        //     if (nodeRandom != null) {        //         RandomListNode nodeRandomCopy = map.get(nodeRandom);        //         nodeCopy.random = nodeRandomCopy;        //     }        //     node = node.next;        // }        // //return map.get(head);        // return copyNode;    }}

0 0