以下是使用其他方法实现的代码:
”`cpp #ifndef NULL #define NULL 0 #endif
#include
// 定义单链表结点结构 struct LNode {
int data;
LNode* next;
LNode() {};
LNode(int e, LNode* n = NULL) :data(e), next(n) {};
};
// 单链表list类创建 class List { protected:
LNode* head;
int _size;
public:
// 构造函数
List() {
head = new LNode;
head->next = NULL;
_size = 0;
}
// 析构函数
~List() {
clear();
delete head;
}
// 头节点
List(int info) { // 使用头结点储存某些信息,不随链表插入改变位置
head = new LNode(info);
_size = 0;
}
int& info() {
return head->data;
} // 返回链表头结点的信息
void clear() {
LNode* p = head->next;
while (p)
{
LNode* temp = p->next;
delete p;
p = temp;
}
head->next = NULL;
_size = 0;
}
bool isEmpty() {
return _size == 0;
}
int size() {
return _size;
}
void insert(int& e) {
_size++;
if (head->next == NULL) {
head->next = new LNode(e);
return;
}
LNode* p = new LNode(e);
p->next = head->next;
head->next = p;
}
void insert(int index, int a) {
if (index < 1 || index > _size + 1) {
return; // 无效的插入位置,直接返回
}
_size++;
LNode* p = head;
// 移动 p 到要插入位置的前一个节点
for (int i = 1; i < index; i++) {
p = p->next;
}
LNode* tmp = new LNode(a);
tmp->next = p->next;
p->next = tmp;
}
void print_L() {
LNode* p = head->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int change()
{
int x, y;
cin >> x >> y;
if (x<0 || x>_size || y<0 || y>_size)
{
cout << "error" << endl;
return -1;
}
if(x == y) return 0;
LNode *pxprev = nullptr, *px = head, *pyprev= nullptr,*py=head;
for (int i=0;i<x;i++)
{
pxprev=px;
px=pxprev -> next ;
}
for(int i=0;i<y;i++)
{
pyprev=py ;
py=pyprev -> next ;
}
pxprev -> next = px -> next ;
pyprev -> next=px ;
px -> next= py ;
return 0;
}
};
int main() {
List LB;
int n, a;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a;
LB.insert(i + 1, a);
}
LB.print_L();
int t;
cin >> t;
for (int i = 0; i < t; i++)
{
int result = LB.change();
if (result == -1)
continue;
LB.print_L();
}
return 0;
}
“`
内容由零声教学AI助手提供,问题来源于学员提问