复杂链表的复刻
请实现一个函数可以复制一个复杂链表。
在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者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;
}
}