问题描述
幼儿园小朋友要玩老鹰捉小鸡的游戏,老师把在场的小朋友按身高递增的顺序排好了队,这时有一位小朋友来晚了,老师需要把他按照身高插入到排好的队列中,请你帮助幼儿园老师把这位晚到的小朋友插入到队列中合适的位置。
输入说明
输入的第1行包含原队列长度N(任意int范围内的非负整数)与待插入的小朋友的身高值M(单位为cm);第2行包含N个递增的小朋友的身高值代表原递增数列。
输出说明
根据此递增数列,构造出递增链表,然后将M插入到链表中,输出插入后的链表对应的数列。数字间隔一个空格,但末尾不能有空格。
输入样例
6 100
99 102 104 105 107 110
输出样例
99 100 102 104 105 107 110
#include<stdio.h> #include<string.h> #include<malloc.h> typedef struct node { int height; struct node *next; }list; //建立单链表 list *CreateList(int t) { int i; list *head,*end,*p; head=(list*)malloc(sizeof(list));//生成头结点 end=head;//尾指针指向头结点 for(i=0;i<t;i++) { p= (list *)malloc(sizeof(list));//生成新结点 scanf("%d",&p->height);//赋值 end->next=p; end=p; } end->next = NULL; return head; } void insert(list *head,int height) { list *s,*z;//引入z结点,为后续转接做准备 list *p = head; s= (list *)malloc(sizeof(list));//生成一个新的结点 s->height=height; while(p->next!=NULL&&(p->next->height)<height) { p = p->next; } if(p->next==NULL)//注意值插在末尾的情况 { p->next=s; s->next=NULL; } else { z=p->next; p->next=s; s->next=z; } }//插入 void Output(list *head) { list *r = head->next; while(r!=NULL) { printf("%d ",r->height); r = r->next; } }//输出 int main() { int num,height; list *L; scanf("%d %d",&num,&height); L = CreateList(num); insert(L,height); Output(L); return 0; }
原文:https://www.cnblogs.com/wabulabudabuda/p/12534393.html