元素未在链表中删除

时间:2013-06-30 18:35:40

标签: c data-structures linked-list

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;
       }
    }
  }
}

3 个答案:

答案 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);
         }
       }
    }
  }