所以我写了一个程序来插入、删除和显示排序的链表。一切都运行得很顺利,但当我输入一个无效的数字(不在排序的链表中)进行删除时,我的程序就会崩溃。这是我的删除功能:-
struct node* remove(struct node* head_ptr, int target)
{
struct node* help_ptr, *node2del;
help_ptr = head_ptr;
if(help_ptr != NULL)
{
if(help_ptr -> data == target)
{
head_ptr = help_ptr -> next;
free(help_ptr);
return head_ptr;
}
while (help_ptr -> next != NULL)
{
if(help_ptr -> next -> data == target)
{
node2del = help_ptr -> next;
help_ptr -> next = help_ptr -> next -> next;
free(node2del);
return head_ptr;
}
help_ptr = help_ptr -> next;
}
if(help_ptr->next->data != target)
printf("n%d is not in the list.",target);
}
return head_ptr;
}
单击此处查看完整程序。提前感谢!
执行while
循环,直到help_ptr->next
变为NULL
。循环结束后,您将比较help_ptr->next->data
,但由于help_ptr->next
是NULL
,因此会崩溃。
最后一个if
基本上是不必要的。如果在while
循环期间未找到该项目,则该项目不在列表中。
遍历整个列表后(就像您在while循环中所做的那样),您将再次检查"if条件"中的下一个元素,这肯定会导致分段错误。从while循环出来后,如果没有找到您要搜索的元素,欢迎您说"element not found"。