C 如何修复此排序链表插入?

C 如何修复此排序链表插入?,c,recursion,linked-list,doubly-linked-list,insertion-sort,C,Recursion,Linked List,Doubly Linked List,Insertion Sort,我被分配了一个简单的任务,处理双链表、动态数据分配和递归。我创建了一个只有10个整数的数组,我试图使用递归将这些整数放入一个排序的双链表中。我在将节点插入链接列表时遇到一些问题;我的输出是2 7 9 100,由于某种原因缺少其他6个整数。我做错了什么?谢谢你的帮助!使用的语言是C #include <stdio.h> #include <stdlib.h> #define N 10 typedef struct node_ { int value; stru

我被分配了一个简单的任务,处理双链表、动态数据分配和递归。我创建了一个只有10个整数的数组,我试图使用递归将这些整数放入一个排序的双链表中。我在将节点插入链接列表时遇到一些问题;我的输出是2 7 9 100,由于某种原因缺少其他6个整数。我做错了什么?谢谢你的帮助!使用的语言是C

#include <stdio.h>

#include <stdlib.h>

#define N 10

typedef struct node_ {
  int value;
  struct node_ *next;
  struct node_ *prev;
} node;

void insert(node **head, node *cur, node *p);
void print_list(node *cur);


void print_list(node *cur)
{
  if (!cur) {
    printf("\n");
    return;
  } else {
    printf("%d ", cur->value);
    print_list(cur->next);
  }
}

int main(int argc, char *argv[])
{
  int i;
  int data[N] = {2, 7, 3, 9, 4, 4, 0, 8, 7, 100};
  node *p, *head;
  head = NULL;
  for (i = 0; i < N; i++) {
    p = (node *)malloc(sizeof(node));
    p->value = data[i];
    insert(&head, head, p);
  }

  print_list(head);
}

void insert(node **head, node *cur, node *p)
{
  if(*head == NULL) 
  {
     p->next = p->prev = NULL;
    *head = p;
    return; 
  }
  if(p->value < cur->value)
  {
    p->prev = cur->prev;
    p->next = cur;
    cur->prev = p;
    if(cur->prev != NULL) 
      cur->prev->next = p;
    else
      *head = p; 
    return; 
  }
  if(cur->next == NULL) 
  {
    cur->next = p;
    p->next = NULL;
    p->prev = cur;
  }
  else 
    insert(head, cur->next, p);
}

我认为问题在于:

cur->prev = p;
if(cur->prev != NULL) 
if永远不会为false,因为您已经丢失cur->prev的值


您需要将cur->prev保存到一个临时变量中,并在if语句中使用该变量,或者在if之后执行赋值。

在调试器中运行程序,并在每次插入后查看列表。或在每次插入后打印您的列表。这些只是一些简单的建议调试技术。如果您坚持调试这些基本问题,而不是轻易求助于他人,那么从长远来看,您会做得很好。谢谢!这正是问题所在