我正在使用链接列表在c ++中编写ADT,并且我在我的一个函数中看起来像是一个while循环而一直遇到分段错误。我自己试着调试它,但找不到故障的来源。
以下是函数中的代码:
void remove(int a){
cout << "remove" << endl;
node * temp;
cout << "remove 2" <<endl;
while(head->number != a){
cout << "remove 3" << endl;
head = head->next;
}
cout << "remove 4" << endl;
temp = head;
head = head->next;
delete temp;
}
Head是一个普通节点,其中head中的变量数是一个整数。头本身是一个节点指针。
谢谢!
答案 0 :(得分:-1)
正如大家在评论中指出的那样,你需要通过检查head的值来检查你是否已经到达列表的末尾。
void remove(int a){
node * temp;
node *ptr = head;
/* Keep iterating list if {Conditional 1 - Head is not NULL && Conditional 2 - number not equal to a} */
while(ptr && ptr->number != a){
ptr = ptr->next; //Walk the linked list
}
/* Do this only if head is not NULL!! */
if(ptr != NULL) {
/* Save head pointer in temp */
temp = ptr;
/* Increment head to point to next node in list */
ptr = ptr->next;
/* Delete original item pointed to by temp */
delete temp;
}
}
理想情况下,'head'始终指向列表的开头(因此名称为head)。我们通常在迭代列表之前声明一个指向head的临时指针。
答案 1 :(得分:-3)
在使用数字
之前,您必须检查头部是否指向null