struct node {
struct node *next;
int data;
} *head;
将元素插入链表后,我使用此删除功能删除链表的元素,但程序卡住了。我不知道哪里弄错了。请帮帮我。
void delete(int num1) {
struct node *del ,*prev_node;
del = head;
if(del == NULL) {
printf("\n The list is empty,cant delete element");
} else {
while(del != NULL) {
if(del->data == num1) {
if(del == head) {
head = del->next;
free(del);
} else {
prev_node->next = del->next;
free(del);
}
} else {
prev_node = del;
del = del->next;
}
}
}
}
答案 0 :(得分:1)
在释放del之后永远不会将del设置为NULL,因此它永远不会离开循环。
free(del);
del = NULL;
答案 1 :(得分:0)
删除它指向的节点后,不会更新del
的值,导致while
循环的下一次迭代中出现未定义的行为。
答案 2 :(得分:0)
指向指针的版本:
void delete2(int num1) {
struct node **pp;
if( !head ) {
printf("\n The list is empty,cant delete element");
return;
}
for (pp = &head; *pp; ) {
if((*pp)->data != num1) {
pp = &(*pp)->next;
}
else {
struct node *del = *pp;
*pp = del->next;
free(del);
}
}
}
}