已知一个递增有序链表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<malloc.h>
typedef int elementType;
typedef struct lnode
{
elementType data;
struct lnode *next;
}Lnode;
//尾插法
Lnode* CreateList(int a[],int n)
{
Lnode *p,*head,*node;
int i;
head = (Lnode*)malloc(sizeof(Lnode));
p = head;
for(i = 0;i<n;i++)
{
node = (Lnode*)malloc(sizeof(Lnode));
node->data = a[i];
p->next = node;
p = node;
}
p->next = NULL;
return head;
}
void Insert(Lnode* head,int temp,int n)
{
Lnode *insert,*p;
p = head->next;
insert = (Lnode*)malloc(sizeof(Lnode));
int i;
insert->data = temp;
if(temp<p->data)
{
insert->next = p;
head->next = insert;
}
for(i = 0;i<n-1;i++)
{
if((temp>p->data) && (temp<=p->next->data))
{
insert->next = p->next;
p->next = insert;
}
p = p->next;
}
if(temp>p->data)
{
p->next = insert;
insert->next = NULL;
}
}
void output(Lnode *head)
{
Lnode *p;
p = head->next;
while(1)
{
printf(" %d",p->data);
if(p->next == NULL)
{
break;
}
p = p->next;
}
}
int main()
{
Lnode *Linklist,*p;
int n,i;
int temp;
scanf("%d",&n);
if(n==0)
{
Linklist = (Lnode*)malloc(sizeof(Lnode));
scanf("%d",&temp);
p = (Lnode*)malloc(sizeof(Lnode));
p->data = temp;
Linklist->next = p;
p->next= NULL;
output(Linklist);
return 0;
}
int a[n];
for(i = 0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&temp);
/*for(i = 0;i<n;i++)
printf("%d",a[i]);*/
Linklist = CreateList(a,n);
Insert(Linklist,temp,n);
output(Linklist);
return 0;
}