【问题标题】:Finding end of linked list查找链表的结尾
【发布时间】:2013-01-22 10:29:54
【问题描述】:

我正在查看面试问题,我遇到了“您如何确定链接列表是否有结束?(即列表不是循环)。”它给出了一个解决方案(一次遍历一个和两个节点,看看指针是否相等)。

难道我们不能只保留我们开始的指针,看看在遍历它时是否再次碰到那个指针吗?还是不行?

【问题讨论】:

    标签: pointers linked-list


    【解决方案1】:

    那行不通:链表可能包含一个不包含第一个指针的循环。

    请记住,链表中的一个节点可以被多个其他节点链接!

    【讨论】:

      【解决方案2】:
      Couldn't we just keep the pointer that we start at and see if 
      while traversing it, we ever hit that pointer again?
      

      没有。请参阅下面的案例。您将只遍历循环而不会碰到列表的开始节点

      另一种判断是否有循环的方法:

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

      【讨论】:

        【解决方案3】:

        获取两个指针,一个应该一次遍历列表一个节点,另一个应该一次遍历列表 2 个节点。 如果在任何时候它们相遇(两个指针都指向同一个节点)。这意味着它是一个循环链表并且没有结束。

        【讨论】:

          猜你喜欢
          • 2014-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-24
          • 1970-01-01
          • 2014-05-19
          • 1970-01-01
          • 2021-01-14
          相关资源
          最近更新 更多