【问题标题】:Finding loops inside linked lists (ex 2.8 from cracking the coding interview)在链表中查找循环(​​破解编码面试中的 2.8 例)
【发布时间】:2018-08-12 20:59:54
【问题描述】:

这是在“破解编码面试”一书中的练习 2.8 之后进行的。在那里,他们要求在链表中找到一个循环。他们提出了一种快跑者/慢跑者的方法,但我找到了一个小得多的解决方案,并想确认我的解决方案是否存在任何类型的问题。

我决定创建一个最初“全为 False”的哈希表,用于跟踪节点是否已被访问。然后我执行一个循环,直到“当前节点”已经​​被访问,循环结束:

class Node():

    def __init__(self,data=None,next=None):
        if data!=None:
            self.data=data
        self.next=next

def find_loop(head,hash_table):

    node=head

    while hash_table[node]==False:
        print(node.next.data)
        hash_table[node]=True

        node=node.next

    node_at_beginning_of_loop=node
    return node.data


if __name__ == "__main__":
    import sys
    node3=Node()

    node5=Node(11,node3)
    node4=Node(5,node5)
    node3.data=6
    node3.next=node4
    node2=Node(2,node3)
    node1=Node(9,node2)

    hash_table={}

    for i in range(1,6):
        hash_table[globals()['node%s' % i]]=False

    print(find_loop(node1,hash_table))

【问题讨论】:

  • 我投票结束这个问题,因为它属于codereview

标签: list loops linked-list find hashtable


【解决方案1】:

您的解决方案会起作用,但就空间而言,这不是一个“有效”的解决方案。快/慢跑者是 O(n) 时间和 O(1) 空间。您的解决方案是 O(n) 时间和 O(n) 空间。此外,您应该在 python 中使用 HashSet / set 而不是 HashMap / 字典。

【讨论】:

    猜你喜欢
    • 2015-12-06
    • 1970-01-01
    • 2013-09-05
    • 2021-10-16
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    相关资源
    最近更新 更多