【问题标题】:copy linked list with random link in each node, each node has a variable,which randomly points to another node in the list复制链表,每个节点都有随机链接,每个节点都有一个变量,随机指向链表中的另一个节点
【发布时间】:2012-01-01 07:33:05
【问题描述】:

面试题:

复制链表,每个节点都有随机链接,每个节点都有一个变量,它是随机的 指向列表中的另一个节点。

我的想法:

迭代列表,通过变量复制每个节点及其指向的节点,并在末尾添加一个哨兵,然后对每个节点执行相同的操作。

在新列表中,对于每个节点 i,将每个以 sentinel 结尾的列表分开,并使用 i 的变量指向它。

在空间上效率不高。在时间和空间上是 O(n^2)。 更好的想法?

【问题讨论】:

    标签: c++ algorithm list data-structures


    【解决方案1】:

    我认为您可以从例如爪哇 序列化,它识别指针何时指向已序列化的节点,以便它可以合理有效地序列化(然后反序列化)任意结构。您可以通过http://docs.oracle.com/javase/1.4.2/docs/guide/serialization/index.html 的链接下载该规范,它说这是完成的,但没有说明具体如何 - 我怀疑是哈希表。

    我认为复制很像这样——你甚至不需要知道某些指针组成了一个链表。您可以使用深度优先搜索来遍历由节点及其指针形成的图,将每个节点的位置放在哈希表中,并将值复制到节点中。如果节点已经存在,您不需要做任何事情,除了使复制节点中的指针指向哈希表所指向的节点的副本。如果节点不存在,则创建副本,将该节点放入哈希表中,并将副本地址作为其值,然后递归地将节点中的信息及其指针复制到新创建的副本中。

    【讨论】:

      【解决方案2】:

      这是一个典型的面试问题。您可以使用 Google 找到许多答案。这是我认为有助于理解的链接。不过也请看cmets,正文有一些错误:Copy a linked list with next and arbit pointer

      【讨论】:

        猜你喜欢
        • 2020-11-30
        • 1970-01-01
        • 1970-01-01
        • 2019-09-02
        • 2013-12-02
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多