一、单链表的建立
单链表的建立分为以下几个步骤:
- 创建节点指针head(头节点),p2,p1;(注意赋初值NULL杜绝野指针)
- 为头节点分配内存空间,并让p2指向头节点;
- 接收头节点数据;
- 开始循环输入数据;
- 为p1开辟内存空间;
- 将接收到的数据给到 p1->data ;
- 将p1链接到p2上,即p2的下一个节点为p1;
- p2指向p1,继续循环 ,到4.;
- 当输入为0时(或别的值),退出循环;
- 退出循环后给尾节点的指针赋值NULL。
代码如下:
//单链表的创建( 0 为结束标志)
node *creatnode(void)
{
node *p2,*p1,*head;
p2=p1=head=NULL;
int x,flag=1; //x为接收缓存,flag为接收完成标志位,flag为 0 时表示接收到结束标志
head = (node *)malloc(sizeof(node));
p2=head;
scanf("%d",&x);
if(0 != x) // 0 作为结束标志位
p2->data = x; //将第一个数据给到头节点
else
flag = 0; //如果第一个数据就是 0 ,则不保存
while(flag)
{
scanf("%d",&x); //接收数据
if(x != 0) //不为 0 时继续
{
p1=(node *)malloc(sizeof(node));
p1->data = x; //接收到的数据给p1
p2->next = p1; //将p1作为p2的后一个节点
p2=p1; //p2指向p1,即p2向后移动一个
}
else
flag = 0;
}
p2->next = NULL; //尾节点指向空
return(head);
}
二、单链表的输出(打印)
单链表的输出分为以下几个步骤:
- 创建一个节点指针p;
- p指向头节点;
- 开始循环,退出标志位指针p不为空;
- 输出数据p->data;
- p指向下一个节点,即p=p->next;
代码如下:
//单链表的打印
void printNode(node *head)
{
node *p = head; //创建节点指针指向头节点
while(p!=NULL) //当节点指向空时退出循环
{
printf("%d\n",p->data); //打印
p=p->next; //指向下一个节点
}
}