首页 > 代码库 > 【LeetCode】Copy List with Random Pointer
【LeetCode】Copy List with Random Pointer
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; } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。