美文网首页
[和小菜鸡一起刷题(python)] LeetCode 138.

[和小菜鸡一起刷题(python)] LeetCode 138.

作者: 海边的小菜鸡 | 来源:发表于2018-12-25 22:43 被阅读0次

原题

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

要求返回这个链表的深度拷贝。

思路

先对链表进行一次遍历,在遍历过程中复制每一个链表节点。同时考虑到要复制随机指针,在遍历的同时创建原始链表节点和复制后的链表节点的关系,此处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

相关文章

网友评论

      本文标题:[和小菜鸡一起刷题(python)] LeetCode 138.

      本文链接:https://www.haomeiwen.com/subject/qeaqlqtx.html