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

插入C中的双向链表

魏鸿
2023-03-14

我的程序不断崩溃。我觉得我的逻辑有问题。请帮忙!谢谢

struct node{
    int data;
    struct node *prev,*next;
} *head = NULL;


void insert(){
    struct node* temp = (struct node*) malloc (sizeof (struct node*));
    int value;
    printf("Enter an element");
    scanf("%d",&value);
    temp -> data = value;
    temp -> next = NULL;
    temp -> prev = NULL;
    if(value < head -> data || head == NULL){
        temp -> next = head -> next;
        head = temp;
        return;
    }
    while(head->next != NULL && value > head -> next -> data)
        head = head -> next;
    temp -> next = head ->next->prev;
    head -> next = temp -> prev;
    while (head -> prev != NULL)
        head = head -> prev;
}

共有3个答案

苏俊友
2023-03-14

首先,想想这两行,如果head==NULL会发生什么:

if(value < head->data || head == NULL){
    temp->next = head->next;

特别是什么是head-

罗昊空
2023-03-14

你的空间不够。

改变

struct node* temp = (struct node*) malloc (sizeof (struct node*));

struct node* temp = (struct node*) malloc (sizeof (struct node));
彭博厚
2023-03-14

试试这个:

#include <stdio.h>
#include <stdlib.h>

struct node{
    int data;
    struct node *prev,*next;
} *head = 0;


void insert(int value){
    struct node* temp = (struct node*) malloc (sizeof (struct node));
    //int value;
    //printf("Enter an element");
    //scanf("%d",&value);
    temp -> data = value;
    temp -> next = 0;
    temp -> prev = 0;
    if(head == 0) {
        // no head, make temp the head
        head = temp;
    } else if(value > head->data) {
        // put temp in front of the head
        temp->next = head;
        head->prev = temp;
        head = temp;
    } else {
        // put temp after the head
        struct node *this = head;
        struct node *prev = 0;
        while(this && this->data > value) {
            prev = this;
            this = this->next;
        }
        temp->next = this;
        temp->prev = prev;
        prev->next = temp;
        if(this) {
            this->prev = temp;
        }
    }
}

int main() {
    insert(1);
    insert(3);
    insert(4);
    struct node *t = 0;
    for(t = head; t; t = t->next) {
        printf("%d\n", t->data);
    }
}

这个编译并按降序值排序。注意,我注释了scanf,并使插入取一个参数。

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

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

  • 我是java的初学者。我试图编写一个程序,在给定的位置插入一个节点,并显示整个链表。然而,我的节点似乎没有被插入,当我显示链表时,只显示第一个节点值。有人能解释一下我哪里出错了吗? //这里,位置是索引位置。索引从0开始,以大小-1结束,就像数组一样。 //插入代码 //遍历代码 //主要方法 输出:

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

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

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