当前位置: 首页 > 知识库问答 >
问题:

获取链表中的分段错误

长孙文栋
2023-03-14
void remove_duplicate(){
    q = start;           //list start has already been created
    while(q->next){
        q=q->next;
        if(q->id==q->next->id){    //removing duplicate values
            q->next->prev = q->prev;
            q->prev->next = q->next;
        }
    }
}

共有1个答案

欧阳炜
2023-03-14

当您是列表中第二个到最后一个节点,其中q->next->next是空指针时,则输入循环主体(因为q->next不是null),并直接使q指向最后一个节点。因此,当您下次使用q->next时,您将取消引用null指针,并且具有未定义的行为。

更改语句的顺序,并将q=q->next赋值放在最后。

或者使用for循环:

for (q = start; q->next != NULL; q = q->next){
    if ...
}
 类似资料:
  • 我正在实现一个类似于队列的双链接列表。因此,当我向列表中添加节点(例如5个节点)并清空列表并尝试向列表中添加新节点时,会出现分段错误(核心转储)。我不知道它为什么这么做。你能解释一下吗?

  • 我有一个家庭作业要写“先到先得”和“循环模拟”并比较它们。我开始创建一个链表来制作事件列表。我制作了插入和打印列表函数,但无法使其工作。我的朋友告诉我使用双链表,所以我重新创建了链表,并试图使插入函数工作。我修复了大部分问题,但现在找不到插入函数的错误。当我比较是否插入指针数据和当前指针数据时,While循环语句出现分段错误。我已经阅读了我的C语言书,书中的代码与我的代码相似,并且还通过了双链表分

  • 问题内容: 我有一个具有以下结构的MySQL数据库表: 我需要按链接列表的顺序获取数据。例如,给定此数据: 我需要按此顺序获取id = 1、2、4、3、9的行。如何使用数据库查询执行此操作?(我可以在客户端执行此操作。我很好奇是否可以在数据库端执行此操作。因此,说不可能是没有问题的(有足够的证据))。 也最好有一个终止点(例如,在10次获取后停止,或者当行中的某些条件变为true时停止),但这不是

  • 我在做这个练习: 编写代码将链表围绕值x分区,使得所有小于x的节点都排在所有大于或等于x的节点之前。示例输入:3- 我发现很难找到单一链表(由我自己创建,不使用库)的解决方案,我想知道我的代码中是否有不必要的代码块,是否有办法避免放入两个链表然后合并?因为它似乎有非常慢的性能。 CustumLinkedList包含两个属性:-LinkedListNode是head,int是size。LinkedL

  • 从上下文菜单中选择: 谢谢