我正在查看面试问题,而且我遇到了“你怎么知道链接列表是否有结束?”(即列表不是循环)。它提供了一个解决方案(一次遍历一个和两个节点,看看指针是否相等)。
我们不能只保留我们开始的指针,看看在遍历它时,我们是否再次击中指针?或者这不起作用?
答案 0 :(得分:2)
这不起作用:链表可能包含一个不包含第一个指针的循环。
请记住,链接列表中的节点可以链接到多个其他节点!
答案 1 :(得分:0)
取两个指针,一次应该遍历列表一个节点,另一个应该一次遍历列表2个节点。 如果在任何时间点它们彼此相遇(两个指针都指向同一个节点)。它意味着它是一个循环链表并且没有结束。
答案 2 :(得分:0)
Couldn't we just keep the pointer that we start at and see if
while traversing it, we ever hit that pointer again?
没有。见下面的案例。您将只是遍历循环而不会访问列表的起始节点
查找是否存在循环的另一种方法:
如果你反转列表,并记住inital节点,你会知道如果你回到第一个节点就有一个循环。虽然有效,但此解决方案更改了列表,不适合多线程应用程序。