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)