我写了下面的程序,它创建了一个新的链表并打印其元素。 我在这里遇到的问题是,当我打印值时,只打印最后一个节点的值,并且打印几次。 请看一下,告诉我在这个程序中我做错了什么。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *link;
}*head=NULL;
void print()
{
struct node *temp=NULL;
temp=head;
while(temp!=NULL)
{
printf("%d", temp->data);
temp=temp->link;
}
printf("NULL");
}
void create_list()
{
int value;char ch;
struct node *new_node=(struct node*)malloc(sizeof(struct node*));
struct node *current=NULL;
printf("before do\n");
do{
printf("enter the data \n");
scanf("%d", &value);
new_node->data=value;
new_node->link=NULL;
if(head==NULL)
{
head=new_node;
current=new_node;
}
else
{
current->link=new_node;
current=new_node;
}
printf("do you want to create another node \n");
ch=getche();
}while(ch=='Y');
}
int main()
{
create_list();
print();
getchar();
return 0;
}
输入和输出:
enter the data
2
do you want to create another node
Y
enter the data
3
do you want to create another node
Y
enter the data
4
do you want to create another node
Y
enter the data
5
do you want to create another node
N
55555555555555555555
55555555555555555555
55555555555555555555
55555555555555555555
55555555555555555555
答案 0 :(得分:1)
您只创建一个节点:
struct node *new_node=(struct node*)malloc(sizeof(struct node*));
上面的行是在do..while循环之前。它应该在循环内。
答案 1 :(得分:1)
问题是您正在为同一节点添加值。通过您的程序,只有一个节点链接到同一节点。由于同样的原因while(temp!=NULL)
失败。 temp->link
指向同一temp
。您获得相同的输出很多(无限)次。