首页 > 解决方案 > 如何“递归”定义链表节点?

问题描述

我们今天刚被介绍给链表,我明白了这个概念,但声明让我很困扰,这里是代码:

struct Node 
{ 
    int data; 
    struct Node *next; 
}; 

为什么这不是声明的无限循环?

编译器如何识别struct Node内部struct Node?

在对我的第二个问题视而不见之后,我的看法如下:

  1. 创建一个结构,其中有一个整数和一个指向相同类型结构的指针。
  2. 在第一个结构体中创建指针指向的结构体,它包含一个整数和一个指向同类型结构体的指针。
  3. 创建由第二个结构中的指针指向的结构,该结构是由第一个结构中的指针指向的结构。
  4. ...

标签: clinked-list

解决方案


  1. 在第一个结构体中创建指针指向的结构体,它包含一个整数和一个指向同类型结构体的指针。

这就是你的推理不成立的地方。创建指向某事物的指针不会自动创建它应该指向的事物。所以第一个对象是用一个指针创建的,并不意味着指针将指向有效的东西。就像我写的一样:

int *p;

它没有指向任何东西。指针的值是不确定的。我可以初始化指针:

int *p = NULL;

它仍然没有指向任何东西。但我可以给它一些地址:

int i = 1;
int *p = &i;

现在是指向某事。与节点中的指针相同。该节点只能保存某个节点的地址,但不是必须的。这就是为什么链表不仅仅是一个节点的声明,也是一组函数(操作)的声明。这些函数旨在确保列表处于有效状态。每个节点都指向另一个节点,或者指向一个明确定义的终止符。


推荐阅读