题目描述
用C++实现含头结点的单链表,然后实现单链表的两个结点交换位置。
注意不能简单交换两个结点包含数据,必须通过修改指针来实现两个结点的位置交换
交换函数定义可以参考:
swapNode(int pa, int pb) //pa和pb表示两个结点在单链表的位置序号
swapNode (ListNode * p, ListNode * q) //p和q表示指向两个结点的指针
输入
第1行先输入n表示有n个数据,接着输入n个数据
第2行输入要交换的两个结点位置
第3行输入要交换的两个结点位置
输入样例:
5 11 22 33 44 55
1 4
2 6
输出
第一行输出单链表创建后的所有数据,数据之间用空格隔开
第二行输出执行第1次交换操作后的单链表数据,数据之间用空格隔开
第三行输出执行第2次交换操作后的单链表数据,数据之间用空格隔开
如果发现输入位置不合法,输出字符串error,不必输出单链表
输出样例:
11 22 33 44 55
44 22 33 11 55
error
代码
#include <iostream>
using namespace std;
struct Node{
int data;
Node *next;
};
class List{
public:
Node *head;
int n;
List(){
head = new Node;
head->next = NULL;
}
void create(){
Node *tail = head;
cin >> n;
for(int i = 0; i < n; i++){
Node *s = new Node;
cin >> s->data;
s->next = NULL;
tail->next = s;
tail = s;
}
display();
}
void swapNode(int pa, int pb){
int i=0;
Node *t = head;
if(pa <= 0 || pb > n){
cout << "error" << endl;
return;
}else{
Node *p,*q,*temp1,*temp2;
while(t){
i++;
if(i == pa){
p = t;
}
if(i == pb){
q = t;
break;
}
t = t->next;
}
temp1 = p->next;
p->next = q->next;
q->next = temp1;
temp2 = p->next->next;
p->next->next = temp1->next;
q->next->next = temp2;
display();
}
}
void display(){
Node *p = head->next;
while(p){
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
};
int main()
{
List list;
int a,b;
list.create();
cin >> a >> b;
list.swapNode(a,b);
cin >> a >> b;
list.swapNode(a,b);
return 0;
}