[和小菜鸡一起刷题(python)] 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容