现在我创建了一个循环来为双向链表创建 25 个节点。通过在主函数中将头指针初始化为 NULL,现在
forward_traversing
和 show_first
函数可以按预期工作。但是尾部值不能初始化为 NULL,我不知道要分配什么或在这段代码中更改什么以允许 backward_traversing
和 show_last
函数工作。
在调试过程中,它会在函数中抛出“分段错误”异常:-
backward_traversal
和 show_last.
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int value;
struct Node *next_link;
struct Node *prev_link;
} Node;
Node *create_node(int value)
{
Node *new_node = malloc(sizeof(Node));
new_node->value = value;
new_node->next_link = NULL;
new_node->prev_link = NULL;
return new_node;
}
void forward_traversing(Node *head)
{
Node *temp = head;
while (temp != NULL)
{
printf("%d ", temp -> value);
temp = temp->next_link;
}
printf("\n");
}
void backward_traversing(Node *tail)
{
Node *temp = tail;
while (temp != NULL)
{
printf("%d ", temp->value);
temp = temp->prev_link;
}
printf("\n");
}
void show_first(Node *head)
{
printf("%d is the first value\n", head->value);
}
void show_last(Node *tail)
{
printf("%d is the last value\n", tail->value);
}
int main()
{
Node *head = NULL , *temp = NULL , *tail = NULL;
for (int i = 25; i >= 0; i--){
temp = create_node(i);
temp -> next_link = head;
temp -> prev_link = tail;
head = temp;
}
forward_traversing(head);
backward_traversing(tail);
show_first(head);
show_last(tail);
free(head);
free(tail);
free(temp);
return 0;
}
我目前正在尝试制作几个函数以在开始、结束和引用另一个节点时插入,也许以某种方式使我的制作节点过程自动化。
对于操作系统,我有 Windows 11,编译器是 Vs Code 中的 GNU 默认编译器
当您的代码将新元素添加到列表的前面时,您应该仅在插入第一个元素时设置
tail
。所以:
代替:
temp -> prev_link = tail;
做:
temp -> prev_link = NULL;
if (i == 25) tail = temp; // First element