已知一个递增有序链表L(带头结点,元素为整数),编写程序将一个新整数插入到L中,并保持L的有序性。
其中单链表的类型定义参考如下:
typedef int elementType;
typedef struct lnode
{ elementType data;
struct lnode *next;
}Lnode,* LinkList;
输入格式:
输入分三行
第一行 元素个数
第二行 元素的值,元素间用空格分隔。
第三行 待插入的元素值
输出格式:
在一行中输出有序链表元素值,每个元素前输出一个空格以便与相邻元素分隔。
输入样例:
5
1 3 5 7 9
4
输出样例:
1 3 4 5 7 9
代码实现:
#include <stdio.h>
#include <stdlib.h>
typedef int elementType;
typedef struct LNode
{
elementType data;
struct LNode *next;
} LNode,*LinkList;
void Create(LinkList &L,int n)
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
LNode *r=L;
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
LNode *s=(LinkList)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
}
r->next=NULL;
}
void Insert(LinkList &L,int e,int n)
{
LNode *p=L->next,*pre=L,*r=L;
LNode *s=(LNode*)malloc(sizeof(LNode));
s->data=e;
while(p!=NULL)
{
if(p->data>e)
{
pre->next=s;
s->next=p;
break;
}
pre=p;
p=p->next;
}
p=L->next;
while(p!=NULL){
r=p;
p=p->next;
}
if(e>r->data){
r->next=s;
s->next=NULL;
}
}
void Print(LinkList L)
{
LNode *p=L->next;
while(p!=NULL){
printf(" %d",p->data);
p=p->next;
}
}
int main()
{
int n;
scanf("%d",&n);
LinkList L;
Create(L,n);
int e;
scanf("%d",&e);
Insert(L,e,n);
Print(L);
return 0;
}