我试图从链表中删除重复项,所以如果列表以[1,1,2,3,4,4,5,5]开头,则附加列表为[1,2,3] ,4,5]。代码如下。
struct node_h
{
int data;
struct node_h* next;
} node;
void remove_h(node* head)
{
while (head != NULL)
{
if (head->data == head->next->data)
{
if (head->next->next == NULL)
{
head->next = NULL;
}
else
{
head->next = head->next->next;
}
}
head = head->next;
}
}
问题在于它的分段错误。有时。
答案 0 :(得分:7)
罪魁祸首是if (head->data == head->next->data)
...如果head->next
为空,则必须是段错误。
首先检查这个条件,如果是真的话,不能重复:只需添加if (head->next == NULL) break;
作为while中的第一个语句或调整while条件。
答案 1 :(得分:3)
您正在检查是否head != NULL
,但在访问head->next
之前,您没有检查head->next->data
是否为非。