c语言链表求教

来源:百度知道 编辑:UC知道 时间:2024/05/26 10:41:21
小弟写了一个程序,看不出有什么问题,但运行不了
#include<stdlib.h>
#include<stdio.h>
void main()
{
struct list
{
int num;
char name[5];
struct list *next;
};
typedef struct list node;
typedef node *llist;
llist head;
llist ptr,pt;
head=(llist)malloc(sizeof(node));
if(!head)
{
printf("内存分配失败");
exit(1);
}
ptr=head;
printf("请输入编号:");
scanf("%d",&ptr->num);
printf("输入姓名:");
scanf("%s",ptr->name);
ptr=ptr->next;
for(int i=0;i<3;i++)
{
ptr=(llist)malloc(sizeof(node));
printf("请输入编号:");
scanf("%d",&ptr->num);
printf("输入姓名:");
scanf("%s",ptr->name);
ptr=ptr->next;
}
ptr->next=NULL;
ptr=head;
for(int j=0;j<=3;j++)
{
printf("编号:%d\n"

请看注释:
//此时ptr=head
ptr=ptr->next;
//此时ptr = NULL
for(int i=0;i<3;i++)
{
//ptr = NULL
ptr=(llist)malloc(sizeof(node));
//ptr是刚分配的空间
printf("请输入编号:");
scanf("%d",&ptr->num);
printf("输入姓名:");
scanf("%s",ptr->name);
ptr=ptr->next;
//此时ptr=NULL
}
//ptr=NULL
ptr->next=NULL; //错,ptr是空指针,没有next域
。。
你程序中所谓的链表其实一个链也没连上。
赋值和移动指针的顺序需要交换一下,比如:
ptr->next = (llist)malloc(sizeof(node));
ptr = ptr->next;

#include<stdlib.h>
#include<stdio.h>

void main()
{
struct list
{
int num;
char name[5];
struct list *next;
};
typedef struct list node;
typedef node *llist;
llist head;
llist ptr;
head=(llist)malloc(sizeof(node));
if(!head)
{
printf("内存分配失败");
exit(1);