我正在编写代码以从排序链表中删除重复元素,在该链表中我将每个元素与下一个元素进行比较。
代码如下:
void removeDuplicates(struct node* head)
{
struct node* nextnext;
struct node* current=head;
if(current == NULL)
return;
while(current != NULL) //Give Segmentation Fault
{
if(current->data == current->next->data)
{
nextnext = current->next->next;
free(current->next);
current->next=nextnext;
}
else
{
current = current->next;
}
}
}
如果我只是将 while 循环从 while(current != NULL)
更改为 while(current->next != NULL)
,段错误就会消失。
当我在每一行之后打印列表时,它会在发生段错误之前打印所有内容直到最后。这是否意味着将最后一个节点与下一个元素进行比较会导致段错误?
最佳答案
段错误很可能是由访问current->next
成员引起的(例如current->next->data
或current->next->next
),因为您没有检查 current->next
是否为 null
。如果是,则对其数据成员的访问是内存违规。
关于c - 在链表中,将最后一个节点与下一个元素进行比较会导致段错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283261/