#include <stdio.h>
#include<stdlib.h>
//创建一个结构体用作链表的结构类型。
struct node
{
int date;
struct node *next;
};
int main()
{
struct node *head,*p,*q,*t,*f;
int n,a;
scanf("%d",&n);
head=NULL; //头指针初始为空.
for(int i=0;i<n;i++)
{
scanf("%d",&a);
p=(struct node *)malloc(sizeof(struct node));//动态申请一个空间用来存放一个节点,并用临时指针p指向这个节点。
p->date=a;//将数据存储到当前节点的date域中。
p->next=NULL;//设置当前节点的后继指针为空,也就是当前节点的下一个节点为空。
if(head==NULL)
head=p;//如果这是第一个创建的节点,就让上一个节点的后继指针指向当前节点。
else
q->next=p;//如果不是第一个创建的节点,则让上一个节点的后继指针指向当前节点。
q=p; //指针q指向当前节点。也可以说将p的地址给q,方便于p的下一次操作。
}
scanf("%d",&a);//读入代插入的数;
t=head;//从链表的头部开始遍历。
while(t!=NULL)
{
if(t->next==NULL||t->next->date>a)//如果当前节点是做后一个节点或者下一个节点的值大于待插入数的时候插入。
{
p=(struct node *)malloc(sizeof(struct node));//动态申请一个空间,用来存放新增节点。
p->date=a;
p->next=t->next;//新增节点的后继指针指向当前节点的后继指针所指向的节点。
t->next=p;//当前节点的后继指针指向新增节点。
break;//插入完毕推出。
}
t=t->next;
}
//输出链表中所有的数。
t=head;
while(t!=NULL)
{
printf("%3d",t->date);
f=t; //f指向t用于释放内存。
t=t->next;
free(f);
}
return 0;
}
链表
最新推荐文章于 2024-09-04 18:37:12 发布

5万+

被折叠的 条评论
为什么被折叠?



