在以下链表创建程序中,输入后程序停止工作。 printf("\n nodes entered are:\n)
之后的代码未运行。
if in for循环用于创建head或start节点。
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
//creating a linked list
typedef struct node
{
int data;
struct node *link;
}node;
int main()
{
int i,n;
node* temp;
node* start=0;
printf("Enter the no of elements in the linked list\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
if(i==0) //for first node
{
node* start=(node*)malloc(sizeof(node));
scanf("%d",&(start->data));
start->link=NULL;
temp=start;
}
else
{
node *nextnode=(node *)malloc(sizeof(node));
scanf("%d",&(nextnode->data));
temp->link=nextnode;
nextnode->link=NULL;
temp=nextnode; //updating temp for next iteration
}
}
printf("\n nodes entered are:\n");
temp=start;
while(temp->link!=NULL)
{
printf("%d ",temp->data);
temp=temp->link;
}
printf("%d",temp->data);
getch();
return 0;
}
答案 0 :(得分:2)
更改此代码段
if(i==0) //for first node
{
node* start=(node*)malloc(sizeof(node));
到
if(i==0) //for first node
{
start=(node*)malloc(sizeof(node));
否则在if语句的复合语句中,您声明局部变量start,它隐藏先前声明的变量start,并且在执行此复合语句后将被删除。