2013-08-17 63 views
1

所以我寫了一個程序來插入,刪除和顯示排序後的鏈表。一切運行平穩,但當我輸入一個無效的數字(不在排序的鏈接列表)刪除,我的程序崩潰。這是我的刪除功能: -在C中排序的鏈表中刪除一個節點

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

Click here爲完整的程序。提前致謝!

回答

3

您的while循環執行到help_ptr->nextNULL。循環後,您比較help_ptr->next->data - 但因爲help_ptr->nextNULL,它崩潰。

最後的if本質上是不必要的。如果在第while循環中未找到該項目,則該項目不在列表中。

+0

感謝您的快速回復! – Shail

0

在遍歷整個列表之後(就像使用while循環做的那樣),您將再次檢查「if條件」中的下一個元素,該元素肯定會導致分段錯誤。如果元素您正在搜索未找到您歡迎說「元素未找到」。