我尝试编写代码来实现并使用for循环打印链接列表。但是我的代码给出了运行时错误。我跑的时候会崩溃。
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node *next;
struct node *prev;
}var;
int main()
{
struct node head;
head.prev=NULL;
struct node *temp;
int i;
for(i=1;i<5;i++)
{
struct node *new=malloc(sizeof(var));
temp->info=i;
temp->next=new;
new->prev=temp;
temp=new;
}
for(i=1;i<=5;i++)
{
printf("%d ",temp->info);
}
return 0;
}
答案 0 :(得分:1)
首先,您必须使用head.next
初始化head.prev
:
head.info = 0;
head.prev=NULL;
head.next=NULL;
您还必须初始化指针temp
。指针应该在开始时引用head:
struct node *temp = &head;
像这样调整你的循环:
for( int i=1;i<5;i++)
{
temp->next = malloc(sizeof(var)); // allocat new nod right on target
temp->next->info=i; // set data on new node
temp->next->prev = temp; // predecessor of successor is temp
temp = temp->next; // one step forward
temp->next = NULL; // successor of last node is NULL
}
要打印节点列表,请使用while
循环,从头向前迈出一步:
temp = &head;
while( temp != NULL )
{
printf("%d ",temp->info);
temp = temp->next; // one step forward
}