138. Copy List with Random Pointer
Posted Premiumlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了138. Copy List with Random Pointer相关的知识,希望对你有一定的参考价值。
https://leetcode.com/problems/copy-list-with-random-pointer/#/description
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.
Sol 1:
# Definition for singly-linked list with a random pointer. # class RandomListNode(object): # def __init__(self, x): # self.label = x # self.next = None # self.random = None class Solution(object): def copyRandomList(self, head): """ :type head: RandomListNode :rtype: RandomListNode """ # Time O(2n) Space O(1) dic = dict() m = n = head # m is to copy label data structure, one pass. Time O(n) while m: dic[m] = RandomListNode(m.label) m = m.next # n is to copy next and random data structure. one pass. Time O(n) while n: dic[n].next = dic.get(n.next) dic[n].random = dic.get(n.random) n = n.next return dic.get(head)
Note:
1 In the initlization of a linked list,
self.label = x
"label" here mean value.... it‘s a name, does not matter
Sol 2:
# Definition for singly-linked list with a random pointer. # class RandomListNode(object): # def __init__(self, x): # self.label = x # self.next = None # self.random = None import collections class Solution(object): def copyRandomList(self, head): """ :type head: RandomListNode :rtype: RandomListNode """ # Time O(n) Space O(1) # Nice lambda initlization here. Pythonic dic = collections.defaultdict(lambda : RandomListNode(0)) dic[None] = None n = head while n: dic[n].label = n.label dic[n].next = dic[n.next] dic[n].random = dic[n.random] n = n.next return dic.get(head)
以上是关于138. Copy List with Random Pointer的主要内容,如果未能解决你的问题,请参考以下文章
138. Copy List with Random Pointer
138. Copy List with Random Pointer
138 Copy List with Random Pointer
138. Copy List with Random Pointer