查找链表的结尾

时间:2013-01-22 10:29:55

标签: pointers linked-list

我正在查看面试问题,而且我遇到了“你怎么知道链接列表是否有结束?”(即列表不是循环)。它提供了一个解决方案(一次遍历一个和两个节点,看看指针是否相等)。

我们不能只保留我们开始的指针,看看在遍历它时,我们是否再次击中指针?或者这不起作用?

3 个答案:

答案 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?

没有。见下面的案例。您将只是遍历循环而不会访问列表的起始节点

Cycle

查找是否存在循环的另一种方法:

如果你反转列表,并记住inital节点,你会知道如果你回到第一个节点就有一个循环。虽然有效,但此解决方案更改了列表,不适合多线程应用程序。