[和小菜雞一起刷題(python)] LeetCode 138. 複製帶隨機指標的連結串列(Copy List with Random Pointer)
阿新 • • 發佈:2018-12-25
LeetCode 138. 複製帶隨機指標的連結串列(Copy List with Random Pointer)
原題
給定一個連結串列,每個節點包含一個額外增加的隨機指標,該指標可以指向連結串列中的任何節點或空節點。
要求返回這個連結串列的深度拷貝。
思路
先對連結串列進行一次遍歷,在遍歷過程中複製每一個連結串列節點。同時考慮到要複製隨機指標,在遍歷的同時建立原始連結串列節點和複製後的連結串列節點的關係,此處python中用dict,類似雜湊的方式儲存兩者的對應關係。
再對複製後的連結串列進行一次遍歷,遍歷過程中根據存下的對應關係修改複製節點中隨機指標的值。
程式碼
# 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
"""
dummy = RandomListNode(0)
ori = head
cp = dummy
ori_cp_dict = {}
while(ori):
cp.next = RandomListNode(ori.label)
cp.next.random = ori.random
ori_cp_dict[ori] = cp.next
ori = ori.next
cp = cp.next
cp = dummy.next
while(cp):
if cp.random:
cp.random = ori_cp_dict[cp.random]
cp = cp.next
return dummy.next