gpt4 book ai didi

c - 插入双向链表

转载 作者:行者123 更新时间:2023-11-30 15:30:28 25 4
gpt4 key购买 nike

我正在尝试插入双向链表。然后我尝试以正向和反向打印列表。我已经创建了一个头节点,并且正在尝试插入另一个头节点,但我无法这样做。程序显示运行时错误。请在下面找到我的代码。任何帮助将不胜感激。

#include<stddef.h>
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
struct node *prev;
};
void insertAfter(struct node *node, int new_data){
if (node == NULL)
{
printf("the given previous node cannot be NULL");
return;
}
struct node* new_node = (struct node*)malloc(sizeof(struct node));
node->data = new_data;
node->next = new_node;
new_node->prev = node;
new_node->next - node->next;
if(new_node->next!=NULL)
new_node->next->prev = new_node;
}
void printlist(struct node *node){
struct node *last;
printf("Traversal in forward direction\n");
while(node!=NULL){
printf("%d\n",node->data);
last = node;
node=node->next;
}
printf("Traversal in backward direction\n");
while(last!=NULL){
printf("%d\n",last->data);
last=last->prev;
}
}
int main()
{
struct node *head;
struct node *tail;
head->data = 5;
tail->data = 10;
head->next = tail;
head->prev = NULL;
tail->next = NULL;
insertAfter(head, 8);

printf("\n Created DLL is: ");
printlist(head);

return 0;
}

最佳答案

这里有几个问题。

首先,正如@Igor 所指出的,您没有为头节点和尾节点分配任何内存。您还应该设置 tail->prev = head

其次,insertAfter 设置链接指针的顺序会导致 node->next 在用于设置 new_node->next< 之前被覆盖。这会导致 new_node->next 指向 new_node 而不是 node 之后的任何内容。您应该在修改 node 之前设置 new_node->nextnew_node->prev。看来您在 new_node->next 的“赋值”中使用了减号而不是等号。

第三,在printlist中,您应该将last初始化为NULL,以防列表为空;否则,您将尝试从未定义的起始(结束)点向后遍历列表。

关于c - 插入双向链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25595635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com