题目链接:http://codeup.cn/problem.php?cid=100000607&pid=3
题目描述
线性表(a1,a2,a3,…,an)中元素递增有序且按顺序存储于计算机内。要求设计一算法完成:
(1) 用最少时间在表中查找数值为x的元素。
(2) 若找到将其与后继元素位置相交换。
(3) 若找不到将其插入表中并使表中元素仍递增有序。
输入
输入:x=3
输入长度:9
输入数据:2 3 5 7 12 15 17 23 45
输出
相同元素为:3
交换后的链表为:2 5 3 7 12 15 17 23 45
样例输入
4
9
2 3 5 7 12 15 17 23 45
样例输出
no
2 3 4 5 7 12 15 17 23 45
代码
#include <cstdio>
#include <cstdlib>
struct node {
int data;
node* next;
};
int main() {
int n, m, data;
node* head, *r, *q, *p;
while(scanf("%d",&m) != EOF) {
scanf("%d",&n);
head = new node;
head->data = NULL;
r = head;
for(int i = 0; i < n; i++) {
scanf("%d",&data);
q = new node;
q->data = data;
r->next = q;
r = q;
}
r->next = NULL;
p = head;
while(p->next != NULL) {
if(p->next->data > m) {
printf("no\n");
q = new node;
q->data = m;
q->next = p->next;
p->next = q;
break;
}
if(p->next->data == m){
printf("%d\n", m);
int temp = p->next->next->data;
p->next->next->data = p->next->data;
p->next->data = temp;
break;
}
p = p->next;
}
if(p->next == NULL)
printf("no\n");
p = head->next;
while(p != NULL) {
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
return 0;
}