lintcode练习-105. 复制带随机指针的链表

105. 复制带随机指针的链表

给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点。

返回一个深拷贝的链表。 

挑战

可否使用O(1)的空间

实现代码:

一个经典题目,思想就是在复制每个原节点链接其后,然后依次添加新节点的random指针。

利用递归可以做到o(1)的空间复杂度

"""
Definition for singly-linked list with a random pointer.
class RandomListNode:
    def __init__(self, x):
        self.label = x
        self.next = None
        self.random = None
"""


class Solution:
    # @param head: A RandomListNode
    # @return: A RandomListNode
    def copyRandomList(self, head):
        # write your code here
        #利用递归,可以做到一个变量实现
        dummy = RandomListNode(0)
        self.helper(head, dummy)
        return dummy.next
    
    def helper(self, head, node):
        if head is  None:
            node = None
            return
        
        node.next = RandomListNode(head.label)
        node.next.random = head.random
        self.helper(head.next, node.next)

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/81708553
今日推荐