2013-08-17 38 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条件”中的下一个元素,该元素肯定会导致分段错误。如果元素您正在搜索未找到您欢迎说“元素未找到”。