复杂链表的复刻

136 阅读1分钟

复杂链表的复刻

请实现一个函数可以复制一个复杂链表。

在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。

注意:

函数结束后原链表要与输入时保持一致。

map

时间复杂度O(n)

class Solution {
    public ListNode copyRandomList(ListNode head) {
        if(head == null){
            return null;
        }
        Map<ListNode,ListNode> copy = new HashMap<>();
        ListNode node = head;
        while(node != null){
            ListNode CloneNode = new ListNode(node.val);
            copy.put(node,CloneNode);
            node = node.next;
        }
        node = head;
        ListNode CloneHead = copy.get(node);
        ListNode CloneNode = CloneHead;
        while(node != null){
            CloneNode.next = copy.get(node.next);
            if(node.random != null){
                CloneNode.random = copy.get(node.random);
            }
            CloneNode = CloneNode.next;
            node = node.next;
        }
        return CloneHead;

    }
}