
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include"malloc.h"
typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;
LinkList InitList(LinkList L)
{
L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
return L;
}
void CreateFromTail(LinkList L)
{
Node *r,*s;
int i,flag=1;
r=L;
while(flag)
{
printf("请输入节点数值:\n");
scanf("%d",&i);
if(i!=0)
{
s=(Node*)malloc(sizeof(Node));
s->data=i;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL;
}
}
}
void out(LinkList L)
{
Node *p;
p=L;
while(p->next!=NULL)
{
printf("%d\n",(p->next)->data);
p=p->next;
}
}
void main()
{
LinkList L,p;
p=InitList(L);
CreateFromTail(p);
out(p);
}
看你代码,你应该是想创建一个有头链表,但是你在初始化链表时定义了指向指针的指针,把你自己都弄糊涂了,然后在表结构中data的类型定义没有用define声明,我看你的建表函数中的data是int类型就直接给定义了int型,然后在你创建表函数输入数据的前面加了一个提示语句,还有的改变就是在输出函数中,因为是由头的,不能用p!=null来做判断,因为你下面用p->next来输出时,最后一个数据会出问题的,所以用p->next来做判断就解决了,不信你可以把我的代码改下,试试就知道了!楼上的肯定是会在第一个数据输出那里出问题的,因为链表头数据是空的,系统就会随便给个值输出的!既然是有头的,输出也要改,改为(p->next)-data,要不然在输出最后一个数据时也会出现问题的。好了!我虽改动了你程序,但只是修正!!希望对你有用