c - 如何“递归”定义链表节点?
问题描述
我们今天刚被介绍给链表,我明白了这个概念,但声明让我很困扰,这里是代码:
struct Node
{
int data;
struct Node *next;
};
为什么这不是声明的无限循环?
编译器如何识别struct Node
内部struct Node?
在对我的第二个问题视而不见之后,我的看法如下:
- 创建一个结构,其中有一个整数和一个指向相同类型结构的指针。
- 在第一个结构体中创建指针指向的结构体,它包含一个整数和一个指向同类型结构体的指针。
- 创建由第二个结构中的指针指向的结构,该结构是由第一个结构中的指针指向的结构。
- ...
解决方案
- 在第一个结构体中创建指针指向的结构体,它包含一个整数和一个指向同类型结构体的指针。
这就是你的推理不成立的地方。创建指向某事物的指针不会自动创建它应该指向的事物。所以第一个对象是用一个指针创建的,并不意味着指针将指向有效的东西。就像我写的一样:
int *p;
它没有指向任何东西。指针的值是不确定的。我可以初始化指针:
int *p = NULL;
它仍然没有指向任何东西。但我可以给它一些地址:
int i = 1;
int *p = &i;
现在是指向某事。与节点中的指针相同。该节点只能保存某个节点的地址,但不是必须的。这就是为什么链表不仅仅是一个节点的声明,也是一组函数(操作)的声明。这些函数旨在确保列表处于有效状态。每个节点都指向另一个节点,或者指向一个明确定义的终止符。
推荐阅读
- javascript - 当字符长度小于特定数字时,jQuery更改html类
- python - 如何杀死以 sudo 启动的 python 子进程?以前的 SO 答案离开僵尸
- bash - 在 bash 中将一个统计/数字与另一个统计/数字分开
- javascript - 如何添加axios代理?
- html - 一个元素没有父元素是什么意思?
- flutter - 如何在 Flutter 中创建全局 TextStyle?
- time - PartiQL 查询中的当前时间
- laravel - 如何从 href 链接传递 vue 数据值或 id 以加载新组件以显示此值或 id?
- css - 固定内容和滚动侧边栏,将网格转换为 flexbox
- python - python创建一个字典列表,每个元素按分钟分隔