访问空指针来检查C++中的链表是否为空
我正在使用C++进行数据结构课程,我们应该实现一个简单的单链表结构。访问空指针来检查C++中的链表是否为空
我有所有其他的方法,但当我检查列表是否为空时,它实际上,程序崩溃,导致分段错误。
当列表是空的,我的链表结构应该是这样的:
HEAD - > NULL
而如果它不是空的,它应该是这样的:
HEAD - > ...... - > NULL
我isListEmpty()看起来像:
bool singleList::isListEmpty(void) {
return (head->next == NULL);
}
我敢肯定,当我尝试访问一个空指针时转储核心,但我不知道在哪里。任何建议我应该看什么?
谢谢。
- 编辑 -
对不起,我还不够清楚。
我敢肯定头本身是不是一个空指针,因为在检查,如果我的代码工作,我喜欢的东西的工作:
list.list_insert_front(guy1);
list.list_insert_front(guy2);
list.list_remove(guy1);
list.list_remove(guy2);
list.isListEmpty(); //This line causes segmentation fault.
大部分的时间,在一个空列表head
是null
,而不是它的next
。
看看两次初始化,并决定是否需要检查head
或它的next
为null
性。
感谢您的回答。但是我们被告知要这样实现它,这样一个名为“head”的元素将永远存在,并且它将指向链表的第一个元素。 –
@정진하你可以拥有一个总是存在的头部,但是如果没有第一个元素,那么'head'是'NULL' – user463035818
@ tobi303哇,我真是太愚蠢了,谢谢。我还在学习使用gdb,我想这应该可以帮助我减少这些问题。非常感谢! –
Head是保持列表的第一个节点的轨道的指针。如果列表为空,则头应该指向空值。
当您尝试访问head-> next时,间接检查是否存在第一个节点(第二个节点)的下一个。
要查找列表是否为空,您需要检查头是否为NULL。
bool singleList::isListEmpty(void) {
return (head == NULL);
}
据我所知,即使你应该有一个单独的头节点,它将在每次列表为空时为空。
如果列表不为空,它只会指向列表的第一个节点。
例如:
LIST:A-> B->Ç - > ...-> Z->空 在这种情况下你的头将指向A.(相反的HEAD将是例如A.头= A)
LIST:null(head = null)
如果头节点是独立的,那么通常它不应该是空的,至少在我的经验中是这样。它可以是一个单独的类,其中包含有关列表的数据或未使用的列表项,它们只是指向下一个列表的开始。 Null意味着它只是指向第一个项目的指针,而不是单独的头节点。 – Confuzing
您是否考虑过'head'可能是NULL的可能性?无论如何,要么学着使用调试器,要么给我们提供[mcve]。 – YSC
你确定'head'不是'nullptr'的空列表吗?这意味着默认的构造函数(可能构造一个空列表)创建一个“头”。也许你打算检查'head'是否为空列表的'nullptr'。 –
您的插入和删除函数调用并不能确保'head'不为空,您可能会添加或删除函数内部的错误链接。将你的函数改为'head == null'来测试它。 – Confuzing