一下程序建立了一个带有头结点的单向链表,链表节点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data域不妨数据,表空的条件是ph->next == NULL)。
其中在函数CreatList()中的指针ph , p, q的作用分别是用来表示创建链表的表头,数据的输入,又来作为ph的表尾是每次数据都插入到表尾当中去。
#include <stdio.h>
#include <stdlib.h>
struct List
{
int data;
struct List *next;
};
struct List* CreatList() //创建的表头是空的,一开始从表头就直接指向q->next=p;
{
int a;
struct List *p,*q,*ph;
ph = (struct List *)malloc(sizeof(struct List));
p = q = ph; //q的作用是作为链表的表尾,使数据不断从表尾中插入
printf("Input an interger number enter -1 to end:\n");
while(scanf("%d",&a),a!=-1)
{
p = (struct List *)malloc(sizeof(struct List));
p->data = a; //插入数据
q->next = p; //使p连接到上一个指针中
q = p; //使q继续指向下一个指针
}
p->next = 0 ; //打印输出时的结束条件
return ph;
}
int main()
{
struct List *Head,*p;
Head=CreatList();
p = Head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
puts("");
return 0;
}