Я попытался вставить узел в конец двусвязного списка с помощью функции вставки, но выполнение процесса резко останавливается после второй вставки. Я попытался проверить адрес всех переменных указателя, используемых в функции вставки, и они показывают, что мой код работает нормально до третьей функции вставки. Как я могу исправить свой код?
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node* next;
struct node* prev;
};
void insert(struct node** header,int data) {
struct node* newnode=(struct node*)malloc(sizeof(struct node*));
newnode->data=data;
newnode->prev=NULL;
newnode->next=NULL;
if(*header == NULL) {
*header=newnode;
return;
}
struct node* temp = *header;
while(temp->next != NULL) {
temp=temp->next;
}
temp->next = newnode;
newnode->prev = temp;
printf("%d\n**\n", temp->next);
}
void main() {
struct node* head = NULL;
insert(&head, 4);
insert(&head, 45);
printf("\n main head %d", head);
insert(&head, 8);
printf("testing");
insert(&head, 69);
}
insert
возьметstruct node *
и вернетstruct node *
; Я обнаружил, что это немного легче понять, так как вам не нужно возиться с двойными указателями. - person APerson   schedule 06.11.2014%p
для печати указателей, либо сохранить формат%d
и распечатать данные узла. - person M Oehm   schedule 06.11.2014head = something(head)
-, что я нахожу более уродливым, чем передача двойных указателей.) - person M Oehm   schedule 06.11.2014