给定一批严格递增排列的整型数据,给定一个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
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList List_creat(int size)
{
LinkList L,r,s;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(int i=0;i<size;i++)
{
s=(LinkList)malloc(sizeof(LNode));
cin>>s->data;
r->next=s;
r=r->next;
}
r->next=NULL;
return L;
}
void List_print(LinkList L)
{
LinkList r;
r=L->next;
while(r)
{
cout<<r->data<<" "; //结尾空行未做处理
r=r->next;
}
}
void List_insert(LinkList &L,int x)
{
LinkList s,r,p; //s的插入位置为p和r的中间
r=L->next;
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=NULL;
while(r->data < x)
{
p=r;
r=r->next;
}
if(r->data==x) return;
else {
p->next=s;
s->next=r;
}
}
int main()
{
int n,x;
LinkList L=NULL;
cin>>n;
L=List_creat(n);
cin>>x;
List_insert(L,x);
List_print(L);
return 0;
}
本文仅针对示例1和2,为防止代码过于臃肿,详细测试点请读者自行修改完善。