Я более или менее просто изучаю C, мне было предоставлено простое задание, которое связано с дважды связанными списками, динамическим распределением данных и рекурсией. Я создал массив из 10 целых чисел, и я пытаюсь поместить эти целые числа в отсортированный дважды связанный список, используя рекурсию. У меня возникают проблемы с вставкой узлов в связанный список; Я думаю, что у меня есть первый узел, но я не уверен, что все остальное имеет смысл. Прямо сейчас я тоже получаю ошибку сегментации ... Спасибо за любую помощь!Вставка двойного связного списка с рекурсией в 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 = (*head);
//(*head)->prev = p;
(*head) = p;
}
if(p->value < cur->value)
{
cur->prev->next = p;
p->prev = cur->prev;
cur->prev = p;
p->next = cur;
}
insert(head, cur, p);
//p->next = *head;
//*head = p;
}
Боковое примечание: вместо 'p = (node *) malloc (sizeof (node));', рассмотрим 'p = malloc (sizeof * p);' поскольку приведение не требуется и меньше шансов на неправильное измерение - меньше набрав. – chux
Что происходит, когда вы проходите через него в отладчике – sp2danny
Когда 'if (* head == NULL)' неясно, что 'p-> prev' всегда установлен. – chux