3.3通过只调整指针(而不是数据)来交换两个相邻的元素——双链表实现
#include<iostream>
using namespace std;
struct Node {
int number;
struct Node* last;
struct Node* next;
};
Node* initNode() {
Node* first = new Node();
if (first == NULL) {
cout << "双链表初始化失败";
exit(-1);
}
first->last = NULL;
first->next = NULL;
return first;
}
void addNode(int number, Node* first) {
Node* temp = first;
while (temp->next != NULL) {
temp = temp->next;
}
Node* addnumber = new Node();
addnumber->number = number;
addnumber->last = temp;
addnumber->next = NULL;
temp->next = addnumber;
}
void readNode(Node* first) {
Node* temp = first->next;
while (temp!= NULL) {
cout << temp->number<<endl;
temp = temp->next;
}
}
void myswap(int number, Node* first) {
Node* temp = first;
while (temp->next != NULL&&temp->next->number != number) {
temp = temp->next;
}
if (temp->next == NULL) {
cout << "该元素后一个元素不存在";
exit(-1);
}
Node* p1 = temp->next;
Node* p2 = temp->next->next;
p1->next = p2->next;
p1->last = p2;
temp->next = p2;
p2->next = p1;
p2->last = temp;
}
int main() {
Node* first = initNode();
for (int i = 1; i < 15; i++) {
addNode(i, first);
}
myswap(0,first);
readNode(first);
int k;
cin >> k;
return 0;
}