给定一批严格递增排列的整型数据,给定一个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"
using namespace std;
const int N = 1000010;
int e[N], ne[N], a[N];
int head, idx;
void init()
{
head = -1;
idx = 0;
}
void head_add(int x)
{
e[idx] = x;
ne[idx] = head;
head = idx++;
}
void insert(int k, int x) // 新增插入函数
{
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++;
}
int main()
{
init();
int n;
cin >> n;
int j;
if(n >0){
cin >> j;
head_add(j);
a[0] = j;
}
for (int i = 1; i < n; i++)
{
cin >> j;
insert(i-1, j);
a[i] = j;
}
int m;
cin >> m;
int flag = 0;
if (a[0] > m || n ==0){
head_add(m);
flag = 1;
}
for (int i = 1; i < n && flag ==0; i++)
{
if (a[i-1] < m && a[i] > m) {
insert(i-1, m);
flag = 1;
}
}
if(a[n-1] < m) {
insert(n-1, m);
flag = 1;
}
int count = 0;
for (int i = head; i != -1; i = ne[i]) {
count ++;
if(count <= n && flag==1)
cout << e[i] << ' ';
else if(count <= n-1 && flag == 0)
cout << e[i] << ' ';
else{
cout << e[i];
}
}
return 0;
}