【问题标题】:given a singly linked list, how to determine head node from a specified node in C?给定一个单链表,如何从 C 中的指定节点确定头节点?
【发布时间】:2011-08-26 06:38:16
【问题描述】:

给定一个单链表,如何从指定节点(例如节点 4)确定头节点。节点总数:10。谢谢。逻辑会做,代码表示赞赏。

我们知道给定一个头节点,可以轻松执行前向遍历并确定下一个节点。

对于这种情况,使用双向链表会更简单,但我想知道是否可以使用单向链表跟踪头节点。谢谢。

【问题讨论】:

  • 单链表总是维护一个指向它的头节点的指针。如果您只是询问头节点的链接列表,那么它应该能够返回您。由于链接是单向的,因此根本不可能从特定节点跟踪头节点。我想知道的是,即使可以从给定节点跟踪标头节点,这会有多大帮助。它总是比直接向链表询问头节点具有更高的复杂性。向链表查询头节点的复杂度为 O(1)。

标签: c data-structures linked-list singly-linked-list


【解决方案1】:

用你描述的那种单链表根本不可能做到这一点。

【讨论】:

  • 视情况而定。问题有点模糊。看我的回答。
【解决方案2】:

您的问题并不完全清楚。但唯一可行的方法是,如果您的每个候选人都是唯一列表的负责人,并且其中一个是您所追求的负责人。

对于每个候选人,遍历从它开始的列表。你最终会打到相应的尾巴,或者你会打到有问题的节点。

即使您的一组候选人并非都是唯一列表的负责人,您也可以完成这项工作。但是您需要逻辑来检测重叠。

【讨论】:

    【解决方案3】:

    你根本不能在单链表中。

    来自维基百科:

    单链表包含具有数据字段的节点以及 'next' 字段,指向节点行中的下一个节点。

    您无法返回上一个节点,因为您没有任何关于它的信息。如果给您一个单链表的任何随机节点,则新列表的head 将是该节点,因为您无法再返回。

    【讨论】:

      猜你喜欢
      • 2018-09-29
      • 2011-11-04
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      相关资源
      最近更新 更多