从c中的链表中删除重复项?

时间:2013-12-19 01:05:06

标签: c linked-list

我试图从链表中删除重复项,所以如果列表以[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;
    }
}

问题在于它的分段错误。有时。

2 个答案:

答案 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是否为非。