题目:
1. 实现链表结构
2. 使用头插法,预先构造一段自定义链表
3. 现要在链表中查找某数X,若找到该数字需要实现:将当前该数字节点与其前一个节点进行交换
4. 代码需要拥有健壮性,可以排除非法输入
涉及知识点:
- 链表结构的定义
- 头插法的使用
- 链表交换操作(其实借鉴链表删除的思想)
代码:
#include <bits/stdc++.h>
using namespace std;
struct node{
int val;
node* next;
node(int x) : val(x),next(NULL) {}
};
node* insert(node* dummy, int x){
auto p = new node(x);
p->next = dummy->next;
dummy->next = p;
return dummy;
}
void swap(node* dummy,int x){
if(dummy->next == NULL){
cout << "Error: 空表" << endl;
return;
}
if(dummy->next->val == x){
cout << "Error: 当前元素已经是最前的元素了,无法再交换"<< endl;
return;
}
for(auto p = dummy; p ; p = p->next){
auto a = p;
auto b = p->next;
auto c = p->next->next;
if(c->val == x){
a->next = c;
b->next = c->next;
c->next = b;
cout << "Success!";
return;
}
}
}
int main(){
auto dummy = new node(-1);
//using insert of head;
insert(dummy,1);
insert(dummy,2);
insert(dummy,3);
for(auto p = dummy->next; p ; p = p->next) cout << p->val << ' ';
cout << endl;
swap(dummy,1);
for(auto p = dummy->next; p ; p = p->next) cout << p->val << ' ';
return 0;
}