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

3 に答える 3

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);
         }
       }
    }
  }
于 2013-06-30T21:00:27.950 に答える