標籤:map list leetcode
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.
思路:第一遍正常複製鏈表,同時用雜湊表儲存鏈表中原始節點和新節點的對應關係,第二遍遍曆鏈表的時候,再複製隨機域。
這是一種典型的空間換時間的做法,n個節點,需要大小為O(n)的雜湊表,同時時間複雜度可以降低到O(n)。
/** * 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> map = new HashMap<RandomListNode, RandomListNode>();RandomListNode res = null;RandomListNode taiListNode = null;RandomListNode cur = head;while (cur != null) {if (res == null) {res = new RandomListNode(cur.label);res.next = res.random = null;taiListNode = res;map.put(head, res);}else{taiListNode.next = new RandomListNode(cur.label);taiListNode = taiListNode.next;map.put(cur, taiListNode);}cur = cur.next;}taiListNode.next = null;cur = head;taiListNode = res;while (cur != null) {taiListNode.random = (RandomListNode)map.get((RandomListNode)cur.random);cur = cur.next;taiListNode = taiListNode.next;}return res; }}