Problem: 138. 随机链表的复制
文章目录
- 题目描述
- 思路及解法
- 复杂度
- Code
题目描述
思路及解法
1.创建Map集合Map<Node, Node> map;创建指针cur指向head;
2.遍历链表将cur作为键,new Node(cur.val)作为值,存入map集合;
3.再次遍历链表,利用map集合存贮的键,将创建的节点(map集合中的值)连接起来,最后返回新链表的头节点
复杂度
时间复杂度:
O ( n ) O(n) O(n);其中 n n n为链表的大小
空间复杂度:
O ( n ) O(n) O(n)
Code
/*
// Definition for a Node.
class Node {int val;Node next;Node random;public Node(int val) {this.val = val;this.next = null;this.random = null;}
}
*/class Solution {/*** Copy List with Random Pointer** @param head The head of linked list* @return Node*/public Node copyRandomList(Node head) {if (head == null) {return null;}Node cur = head;Map<Node, Node> map = new HashMap<>();while (cur != null) {map.put(cur, new Node(cur.val));cur = cur.next;}cur = head;while (cur != null) {map.get(cur).next = map.get(cur.next);map.get(cur).random = map.get(cur.random);cur = cur.next;}return map.get(head);}
}