一个构建链表的简单程序,请高手修改一下

来源:百度知道 编辑:UC知道 时间:2024/05/12 11:53:00
/*构建一个长度为10的链表,每个节点一次放着1,2,3.....10*/
#include<STDIO.H>
#include<CONIO.H>
#define N 10
typedef struct shu * link;
struct shu{int num;link next;} *head;

void main()
{
int i;
link tail,current;
head->num=1;
tail=(link)malloc(sizeof *tail);
head->next=tail;
tail->next=NULL;

printf("\n********************\n");
/*建立长度为N的链表*/
for(i=2;i<=N;i++)
{

current=(link)malloc(sizeof *current);

current->num=i;
printf("%d %d\n",current->num,tail->num); /*tail->num根本就没有赋值,为何输出了数,而且和current->num相等?*/
current->next=tail->next;
tail->next=current;
tail=current;

}

printf("\n@@@@@@@\n");
current=head;
while(current->next!=NULL) /*从这里的输出可以看出前面的链表没有构建成功*/
{

让我从前到后分析:

1、head->num=1;
head还没有申请空间,怎么就给值了?这是错误的。
应该这样:
tail=(link)malloc(sizeof *tail);
tail->num=1;
tail->next=NULL;
head=tail;

2、while(current!=NULL)
应该是这样输出,不然少输出一个

下面程序就没有问题了:

/*构建一个长度为10的链表,每个节点一次放着1,2,3.....10*/
#include<STDIO.H>
#include<CONIO.H>
#include<stdlib.h>
#define N 10
typedef struct shu * link;
struct shu{int num;link next;} *head;

void main()
{
int i;
link tail,current;
//head->num=1;
tail=(link)malloc(sizeof *tail);
tail->num=1;
tail->next=NULL;
head=tail;

printf("\n********************\n");
/*建立长度为N的链表*/
for(i=2;i<=N;i++)
{

current=(link)malloc(sizeof *current);

current->num=i;
printf("%d %d\n",current->num,tail->num); /*tail->num根本就没有赋值,为何输出了数,而且和current->num相等?