给定一批严格递增排列的整型数据,给定一个x,若x不存在,则插入x,要求插入后保持有序。存在则无需任何操作。
输入格式:
输入有两行:
第一个数是n值,表示链表中有n个数据。后面有n个数,分别代表n个数据。
第二行是要插入的数。
输出格式:
输出插入后的链表数据,以空格分开。行末不能有多余的空格。
输入样例1:
在这里给出一组输入。例如:
5 1 3 6 9 11
4
输出样例1:
在这里给出相应的输出。例如:
1 3 4 6 9 11
输入样例2:
在这里给出一组输入。例如:
5 1 3 6 9 11
3
输出样例2:
在这里给出相应的输出。例如:
1 3 6 9 11
//写的时候就觉得不想调用函数,所以干脆都没使用函数,所以十分繁琐
//要注意的是,在插入X时的特殊情况,1,在最前面 2,在最后面
#include<stdio.h>
#include<malloc.h>
struct node{
int data;
struct node *next;
};
int main(void)
{
int n,t,x;
scanf("%d",&n);
struct node *head,*p,*q,*m;
head=(struct node *)malloc(sizeof(struct node));
head->next=NULL;
q=head;
while(n--){
scanf("%d",&t);
p=(struct node*)malloc(sizeof(struct node));
p->data=t;
p->next=NULL;
q->next=p;
q=p;
}
scanf("%d",&x);
if(head->next==NULL){
m=(struct node*)malloc(sizeof(struct node));
m->data=x;
m->next=NULL;
head->next=m;
}
for(p=head->next,q=head;p!=NULL;p=p->next){
if(p->data==x){
break;
}
else if(p->data>x){
m=(struct node*)malloc(sizeof(struct node));
m->data=x;
m->next=p;
q->next=m;
break;
}
q=p;
}
if(p==NULL){
m=(struct node*)malloc(sizeof(struct node));
m->data=x;
m->next=NULL;
q->next=m;
}
int flag=0;
for(p=head->next;p!=NULL;p=p->next){
if(flag){
printf(" ");
}
flag=1;
printf("%d",p->data);
}
printf("\n");
return 0;
}