首页 > 解决方案 > 链表循环检测基本问题

问题描述

所以这是我检测循环的代码。我在这里有一个疑问。为什么我要在 dic 中寻找 current 而不是在 dic 中寻找 current.data?如果我单独存储该节点的值,它会给出错误的答案。当我存储节点的值而不是节点时会发生什么。我正在学习链表,所以我无法掌握存储节点本身时会发生什么以及单独存储节点值时会发生什么。

def detectLoop(head):

    dic={}
    current=head
    flag=5
    while current is not None:
        if current in dic:
            flag=6
            break
        else:
            dic[current]=5
            current=current.next
    if flag==5:
        return False
    else:
        return True

标签: pythonloopsdata-structureslinked-list

解决方案


通过比较节点,您正在检查您是否在同一节点对象上运行了两次。通过检查值,您忽略了两个节点可能共享相同值的情况,因此,您的方法将报告存在一个循环,而实际上没有。如果没有具有重复值的节点,那没关系。


推荐阅读