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;
}
}
}
当您是列表中第二个到最后一个节点,其中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语言书,书中的代码与我的代码相似,并且还通过了双链表分
null
问题内容: 我有一个具有以下结构的MySQL数据库表: 我需要按链接列表的顺序获取数据。例如,给定此数据: 我需要按此顺序获取id = 1、2、4、3、9的行。如何使用数据库查询执行此操作?(我可以在客户端执行此操作。我很好奇是否可以在数据库端执行此操作。因此,说不可能是没有问题的(有足够的证据))。 也最好有一个终止点(例如,在10次获取后停止,或者当行中的某些条件变为true时停止),但这不是
我在做这个练习: 编写代码将链表围绕值x分区,使得所有小于x的节点都排在所有大于或等于x的节点之前。示例输入:3- 我发现很难找到单一链表(由我自己创建,不使用库)的解决方案,我想知道我的代码中是否有不必要的代码块,是否有办法避免放入两个链表然后合并?因为它似乎有非常慢的性能。 CustumLinkedList包含两个属性:-LinkedListNode是head,int是size。LinkedL
从上下文菜单中选择: 谢谢