在C++中检查链表是否为空
Checking whether a linked list is empty in C++
我试图理解while条件while(C)
中的语句是如何检查单个链表是否为空的。
node* remove(nodo*C, int y){
FIFO F;
while(C){
if(C->info==y) {
node* p=C;
C=C->next;
delete p;
}
else {
F=metti_fondo(F,C);
C=C->next;
}
}
if(F.fine)
F.fine->next=0;
return F.primo;
使用的数据类型为:
struct node{int info; node* next; node(int a=0, node* b=0){info=a; next=b;}};
我不明白的是,节点C的简单引用如何足以检查列表是否为空。它不应该是while(C->next == 0)
或类似的东西吗?我检查了一下,我的版本不起作用,而之前显示的代码运行良好。
当我只引用节点C,而没有引用任何信息或下一个字段时,它会检查什么?
提前感谢
我假设如果链表真的是"空的",那么指针将为null。然后在if检查中将null值转换为false。C->next==0(可能也应该在这里检查null(将检查链表的第一个节点是否没有子节点。
链接列表由节点组成,每个节点指向下一个节点。在一个简单的实现中,最后一个节点只是指向null。
如果我们把它写成Node(val(->next,那么类似于N1(0(->N2(10(->N3(3(->空
我们本可以N1(0(->空
并且该列表不会为空,但是检查C->next仍然为空。一个空列表就是空
条件while语句的计算结果为true或false,具体取决于参数。在这种情况下,我相信如果指针C引用了一个空地址,则条件将评估为false。
TL;DR:它测试"C"是否被分配了一个非零值。
在C和C++中,当一个语句的求值结果为零(0(时,它是false,否则它的求值结果是true。
#include <iostream>
int main() {
if (0)
std::cout << "nevern";
if (42)
std::cout << "alwaysn";
if (0.2)
std::cout << "al.waysn";
}
因此,当指针指向内存地址0时,其计算结果为false
——按照正确性的顺序,通过将其设置为nullptr
、NULL
或0
来完成,但请记住,NULL
通常是#define 0
或#define 0ULL
。使用整数0
作为指针的问题是。。。它是一个整数。这可能导致歧义:
void f(int);
void f(char*);
f(0); // which one?
以下代码打印"世界":
#include <iostream>
int main() {
const char* p = nullptr;
if (p)
std::cout << "hello";
p = "world";
if (p)
std::cout << p;
std::cout << "n";
}
(http://ideone.com/iy5GcX)
因此,在常见的链表实现中,列表的末尾用一个null指针表示,因此可以通过列表的头作为末尾来检测空,即作为一个nullptr。
Node* head;
/*...*/
if (head) {
// points to something, list is not empty
}
以及构建
for (Node* node = head; node; node = node->next) {
...
}
如果列表为空,将"短路":节点最初被分配了head的值。如果head为null,则第一个测试将失败( ... ; node ; ...)
,并且不会执行任何迭代。
- 检查注册表项是否链接到(或副本)另一个注册表项
- 我当前实现的双向链表类是否需要重构迭代器 end() 功能?
- 测试双向链表是否形成算术级数
- 是否可以创建带有索引但没有指针的单个链表?
- 给定一个创建的带有货物的链表,我需要使用函数检查实际序列或"train"是否有效
- 如何在用于删除节点的函数中检查我的链表是否C++为空
- 链表的这个别名运算符是否会产生深度复制
- 是否可以将新的列表节点分配给链表的现有节点
- 是否可以从 const 方法迭代链表
- 如何检查链表中的数据是否存在C++
- 不太确定如何从这里继续前进.是否使用链表进行搜索
- 查找链表是否为循环列表
- 如何检查元素是否存在于 c++ 中的链表中
- 对象数组作为链表中的字符数组 - 我对对齐的假设是否有效
- 我的链表实现是否泄漏内存
- 使用链表确定是否合适的子集
- 测试链表是否彼此相等
- 如何检查链表数组中的某个链表是否为空
- 如何使用 c++ 检查链表是否排序
- 需要修改堆栈/链表程序以确定单词是否为回文