# include <stdlib.h> //包含malloc()的头文件
# include <stdio.h>
struct node //链表节点的结构
{
int num;
struct node *next;
};
int main(void)
{
struct node *creat(); //函数声明
void print();
struct node *head; //定义头指针
head = NULL; //创建一个空表
head=creat(head); //创建单链表
print(head); //打印一个单链表
return 0;
}
struct node *create(struct node *head) //函数返回的是与节点相同类型的指针
{
int n;
struct node *p1 = NULL, *p2 = NULL; //定义两个指针
printf("\n 请输入一个数字(>0),如果输入-1则退出:\n");
scanf("%d",&n); //从键盘键入节点的值
while(n>0) //输入节点的数值大于0
{
p1 = (struct node*)malloc(sizeof(struct node)); //p1指向申请的新节点
p1->num = n;
p1->next = NULL; //将新节点的指针置为空
if(head==NULL)
head = p1;
else
p2->next = p1;
p2 = p1;
scanf("%d",&n);
}
return head;
}
void print(struct node *head) //输出以head为头的链表各节点的值
{
struct node *temp;
temp = head; //取得链表的头指针
while(temp!=NULL) //tenp所指节点不能为空
{
printf("%6d",temp->num); //输出temp所指的节点的值
temp = temp->next; //temp后移指向下一个节点
}
}