使用C++多链表修改后的代码如下所示:
#ifndef NULL
#define NULL 0
#endif
#include<iostream>
using namespace std;
// 定义多链表结点结构
struct MLNode {
int data;
MLNode* next;
MLNode* sibling; // 指向兄弟链表的头节点
MLNode() {}
MLNode(int e, MLNode* n = NULL, MLNode* s = NULL) : data(e), next(n), sibling(s) {}
};
// 多链表list类创建
class MultiList {
protected:
MLNode* head;
public:
// 构造函数
MultiList() {
head = new MLNode;
head->next = NULL;
head->sibling = NULL;
}
// 头插法插入元素到兄弟链表中
void insertSibling(int& e) {
MLNode* p = new MLNode(e, NULL, head->sibling);
head->sibling = p;
}
// 在指定位置插入元素到主链表中
void insert(int index, int a)
{
if (index < 1 || index > _size + 1)
{
return; // 无效的插入位置,直接返回
}
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 printList() {
MLNode* p = head->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
// 打印兄弟链表
void printSibling() {
MLNode* p = head->sibling;
while (p != NULL) {
cout << p->data << " ";
p = p->sibling;
}
cout << endl;
}
};
int main() {
MultiList LB;
int n, a;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a;
LB.insert(i + 1, a);
}
LB.printList();
int t;
cin >> t;
for (int i = 0; i < t; i++) {
int a = LB.change();
if (a == -1)
continue;
LB.printList();
}
return 0;
}
注意,在此示例中,我们添加了一个新的成员变量sibling来表示兄弟链表,并在相应的函数进行修改。
内容由零声教学AI助手提供,问题来源于学员提问




