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

C中的双链表,按值插入

景宏盛
2023-03-14
void f_insert_by_value(the_individual **head, char *str, int a) {
    the_individual *current = *head, *temp = f_create(str, a);

    if (*head == NULL) *head = temp;
    else {
        if (temp->age < (*head)->age) {
            temp->next = (*head);
            (*head)->prev = temp;
            (*head) = (*head)->prev;
        }
        else {
            while (temp->age > current->age && current->next != NULL) current = current->next;
            if (current->next = NULL) {
                temp->prev = current;
                current->next = temp;               
                current = current->next;
            }
            else {
                temp->prev = current->prev;
                temp->next = current;
                current->prev->next = temp;
                current->prev = temp;
            } 
        }
    }
    return;
}

分段故障发生在“电流->prev->next=temp”上。我试图打印地址以了解为什么会发生这种情况,并发现在输入中第一个节点的前一个元素总是指向NULL。有人能解释为什么会发生这种情况以及如何修复它吗?谢谢你。

共有1个答案

欧阳睿范
2023-03-14

在第一个节点上,current->prev为null,因为current是第一个节点,您做对了。

temp->prev = current->prev;
temp->next = current;

这是正确的,您在正确的位置设置了新节点,但是现在current并没有导致正确的结果。您的模式在这一点上是这样的:

NULL <= temp => current
NULL <= current <=> ...

你想要

NULL <= temp <=> current <=> ...
current->prev->next = temp
temp->prev = current->prev;
temp->next = current;
if (current->prev != NULL) {
    current->prev->next = temp;
}
current->prev = temp;
 类似资料:
  • 我的程序不断崩溃。我觉得我的逻辑有问题。请帮忙!谢谢

  • 我或多或少只是在学习C语言,我被分配了一个简单的任务,处理双链表、动态数据分配和递归。我创建了一个只有10个整数的数组,我试图使用递归将这些整数放入一个排序的双链表中。我在向链表中插入节点时遇到了一些问题;我想我已经搞定了第一个节点,但我不确定其他节点是否有意义。现在我也遇到了一个分割错误。。。谢谢你的帮助!

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

  • 我真的需要一些帮助来解决我已经努力了几天的地址簿程序。我正在用C语言处理双向链表。我试图在用户输入的位置将节点添加到列表中,从位置0开始。位置将不会被输入超出范围。(在位置0等位置之前,位置1没有插入)但是位置可以重复:将新节点插入在前一个位置占用者之前的位置。(例如:如果位置1有x,并且新节点插入位置1有y,则位置1现在有y,位置2有x) 我需要获取用户输入的位置号,并检索该位置的当前人员,但我

  • 给我一个指向排序双向链表的头节点的指针和一个插入到列表中的整数。我被告知创建一个节点并将其插入到列表中的适当位置,以保持其排序顺序。头节点可能是NULL。 样本输入 空,数据=2 NULL 样本输出 NULL NULL 我试过上面的问题。但我的程序因超时而终止。在下面的代码中,我做错了什么。假设节点类和主函数已经存在。非常感谢!!

  • 我试图在C中的双向链表上做插入排序。在这种状态下,我的代码让我陷入了一个没有结束的循环,吐出了8和9。 有人能好心解释一下“插入排序”方法是如何设计的吗? 我的链表是设计包含头,上一个,下一个和一些数据。 到目前为止这是我的代码 我的希望破灭了。请帮忙。