了解链表教程
Understanding Linked Lists tutorial
我正在阅读cprogramming.com上的教程,我有点拘泥于它们的链表示例。代码如下:
#include <iostream>
using namespace std;
struct node {
int x;
node *next;
};
int main() {
node *root;
node *conductor;
root = new node;
root->next = 0;
(*root).x = 12; // I was testing alt. syntax.
conductor = root;
if(conductor != 0) {
while(conductor->next != 0) {
cout << conductor->x;
conductor = conductor->next;
}
}
conductor->next = new node;
conductor = conductor->next;
conductor->next = 0;
(*conductor).x = 42;
cout << conductor->x;
return 0;
}
在该示例中,root->next
被设置为0
。然后conductor
被设置为root
的地址,这意味着while循环永远不会到达,对吗?
如果这个例子没有演示链表的使用(即添加更多的节点,并遍历它们),我就不理解它的目的。
我对代码的分析是否正确?
你是对的,在这个例子中,while循环应该被跳过,因为conductor->next从一开始就是0。
这可能是一个简单的错误,作者想展示列表的遍历方式,而他的代码实际上是完全正确的。我最好的猜测是他抄袭了&将这段代码从一个(可能是他自己的)LinkedList类中粘贴出来,并试图在不进行测试或仔细思考的情况下组装一个快速示例。按照现在的工作方式,while循环基本上没有意义,因为它什么都不做——但这可能不是作者的意图。
这根本没有意义
root = new node;
//then later
conductor = root;
if(conductor != 0) {
这里conductor
不能为空-检查没有意义,然后
while(conductor->next != 0) {
这里conductor
等于root
,所以conductor->next
是空
conductor->next = new node;
此外,当程序结束时,所有创建的节点都会泄漏。这个样本没有显示任何东西。
然后将导线设置为根的地址,表示时间循环永远不会到达,对吧?
如果root
是非0
,那么conductor
也是非0
,那么肯定会达到while()
循环。
您的示例中的代码虽然可能在描述一些东西,但在我看来并没有起到任何作用:)。因为在while循环之前,根和导体指向同一个对象,并且该对象的下一个包含0。所以while循环永远不会启动。之后,我们创建一个新节点,并让next指向它。然后,我们将导体指针指向该节点,并将其next设置为0。这将导致内存泄漏。
root = new node;
root->next = 0;
创建新的CCD_ 14&将CCD_ 15指针初始化为CCD_。
conductor = root;
将conductor
指针设置为root
的地址
if(conductor != 0)
{
while(conductor->next != 0)
{
cout << conductor->x;
conductor = conductor->next;
}
}
为了添加一个新节点,需要导航到链接列表的末尾,上面的while循环可以做到这一点。
可能,这个示例代码是通过从现有的链接列表代码中组装片段而快速组合在一起的。如果您知道链接列表中只有一个节点,那么这个while循环就没有必要了。可能,它是一些函数的一部分,比如原始代码中的addNodeToList()
,在向列表添加新节点之前,它需要导航到列表的末尾。
next = 0
标记列表的末尾,类似于以零结尾的字符串。一般来说,这是一个带有链表的约定。填充列表时,将以零结尾的next
指针向前移动(穿过列表)。所有其他节点都有一个指向列表中下一个节点的有效next
值。
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 文本文件中的单词链表
- 努力将整数转换为链表。不知道我在这里做错了什么
- 链表,反向函数,数据结构
- 使用std::list创建循环链表
- 链表的泛型函数remove()与成员函数remove)
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 我们可以删除链表中静态内存中的节点吗
- C++,指针数组,指向双链表中的条目
- 链表中写入访问冲突的未知原因
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 打印所有链表的元素 (C++)
- 错误:需要类名(链表c++)
- 为什么C中的通用链表中存储的数据已损坏
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 链表c++插入,所有情况都已检查,但没有任何工作
- 链表,将列表复制到另一个列表
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 了解链表教程