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

标签 c linked-list

我试图从链表中删除重复项,因此如果链表以 [1,1,2,3,4,4,4,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;
    }
}

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

最佳答案

罪魁祸首是 if (head->data == head->next->data) ... 如果 head->next 为空,这一定是段错误.

首先检查这个条件,没有重复是可能的,如果它是真的:只需添加 if (head->next == NULL) break; 作为 while 中的第一个语句或修改while 条件。

关于c - 从 c 中的链表中删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20671689/

相关文章:

c - 一种用C删除链表元素的方法

algorithm - 为什么我们需要检测链表中的循环

c - 数组元素看似任意变化[并行快速排序/前缀和]

c++ - unixaccept()函数两次返回相同的文件描述符

c - 代码中出现奇怪的段错误

c - 我要覆盖我的链表吗?

c++ - 高效获取 C++ 链表中最大的 3 个整数(未排序)

c - 使用静态库而不是共享库

c - gcc前增量和后增量优化

c++链表在另一个内部