【题目来源】
https://www.acwing.com/problem/content/3712/
【题目描述】
输入一个单链表,依次交换前2个数,第3、4个数,第5、6个数,...,以此类推,直到操作完整个链表。
如果链表长度是奇数,则最后一个数不用操作。
输出交换之后的链表。
【输入格式】
第一行包含整数 n,表示节点数量。
第二行包含 n 个整数,表示每个节点的值。
【输出格式】
共一行,输出交换后的链表。
【数据范围】
1≤n≤100,
节点取值范围 [1,100]。
【输入样例】
5
1 2 3 4 5
【输出样例】
2 1 4 3 5
【算法分析】
本题是四川大学考研机试题。
在编码时,不要一看到单链表,就去用链式结构实现,这样就势必增加了编码复杂度。可以考虑用数组模拟实现,可大大简化编码难度。
【算法代码】
cpp
#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
int a[maxn];
int main() {
int n;
cin>>n;
for(int i=1; i<=n; i++) cin>>a[i];
int t=n;
if(n%2!=0) t--;
for(int i=1; i<t; i+=2) swap(a[i],a[i+1]);
for(int i=1; i<=n; i++) cout<<a[i]<<" ";
}
/*
in:
5
1 2 3 4 5
out:
2 1 4 3 5
*/