Leetcode刷题记录——剑指 Offer 35. 复杂链表的复制

Leetcode刷题记录——剑指 Offer 35. 复杂链表的复制_第1张图片
Leetcode刷题记录——剑指 Offer 35. 复杂链表的复制_第2张图片
分为三步
第一
在原链表的每个节点后面 复制一个与该节点值相等的节点 这个复制节点的random可以先不管 默认为None

第二
将每个原本的节点的next(即刚刚复制出的节点) 指向原本节点的random的next(原本的节点的random的next是原本节点的random指向的节点所对应的复制节点)

第三
只保留所有复制出的节点
将原本的节点都断连
最后返回第一个复制节点

"""
# Definition for a Node.
class Node:
    def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
        self.val = int(x)
        self.next = next
        self.random = random
"""
class Solution:
    def copyRandomList(self, head: 'Node') -> 'Node':
        if head == None:
            return None
        #现在每一个节点后面复制一个
        cur = head
        while cur != None:
            rem = cur.next
            cur.next = Node(cur.val)
            cur.next.next = rem
            cur = rem
        cur = head
        while cur != None:
            if cur.random != None:
                cur.next.random = cur.random.next
            cur = cur.next.next
        newhead = head.next
        cur = newhead
        while cur.next != None:
            cur.next = cur.next.next
            cur = cur.next
        return newhead

你可能感兴趣的:(leetcode,python编程技巧)