【问题标题】:I have a simple question about linked list in c我对c中的链表有一个简单的问题
【发布时间】:2021-04-26 15:41:42
【问题描述】:

我有一个关于链表的简单问题。

据我所知是否有头节点,node1和node2,头节点指向node1,node1指向node2,node2指向NULL。

但是有没有可能node2指向node1,node1指向头节点,头节点指向NULL??

【问题讨论】:

  • 有可能——您似乎在寻找doubly linked list
  • 在什么意义上“可能”?有可能您可以编写代码来实现这一点。您可能有反向链接。从某种意义上说,这些指针不可能违反标准正向链表的规则。
  • C 标准库中没有链表库,这取决于您的节点结构。您能否分享您的节点结构以使您的问题变得清晰?
  • 如果头节点指向NULL,那么从那个节点看,你的链表是空的。这是一个定义问题。你可能会说:是的,但是从 node2 看,这个列表不是空的。我可能会问:那你为什么把最后一个节点称为头节点?

标签: c linked-list


【解决方案1】:

通常这被称为双向链表,其中每个节点都有一个指向其前任和后继的指针。 https://www.geeksforgeeks.org/doubly-linked-list/

C 的优点和危险在于,程序员可以决定如何声明它。非常抽象地,你可以调用尾节点头,这个约定将成立。

【讨论】:

    【解决方案2】:

    有点不清楚你在问什么,但我想我可以为你解决问题。

    链表主要有两种实现方式:

    单向

    每个节点都有一个值和指向Next 节点的指针 列表包装器指向 1stNode 最后一个节点指向NULL

    例如
    [节点1Val |下一个] --> [Node2Val |下一个] --> NULL

    双向(又称双向链表)

    每个节点都有一个值和两个指针:

    • 指向列表中的next 节点。
    • 在列表中第二个previous 节点。

    例如
    NULL [上一个 |节点2Val |下一个] --> NULL

    注意

    理论上,链表中可以有Cycles,但称其为链表并没有多大用处。
    这些在现实生活中的应用程序中发挥的作用不大,只出现在工作面试和愚蠢的问题中。

    例如
    --> [Node1Val |下一个] --> [Node2Val |下一个] __
    \___________________________________/ :: 尝试画一个循环箭头到第一个。

    【讨论】:

      【解决方案3】:

      这称为双向链表,您可以在此处找到示例 http://linuxandc.com/doubly-linked-list/

      【讨论】:

        猜你喜欢
        • 2011-08-29
        • 1970-01-01
        • 2021-09-02
        • 2019-05-27
        • 2020-09-18
        • 2011-09-17
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多