zhuaizhai 下午好🌅🌅🌅
本答案参考ChatGPT-3.5
下面是解决该问题的具体步骤:
- 首先,需要定义一个链表节点的结构体。每个节点包含一个整数data和指向下一个节点的指针next。
struct ListNode {
int data;
ListNode* next;
};
- 接着,需要定义两个有序链表的头指针La和Lb,并初始化为空指针。
ListNode* La = nullptr;
ListNode* Lb = nullptr;
- 然后,根据输入的有序整数序列构建两个有序链表La和Lb。
void CreateList(ListNode*& head, int len) {
for (int i = 0; i < len; i++) {
int num;
cin >> num;
ListNode* newNode = new ListNode();
newNode->data = num;
newNode->next = nullptr;
if (head == nullptr) {
head = newNode;
} else {
ListNode* p = head;
while (p->next != nullptr) {
p = p->next;
}
p->next = newNode;
}
}
}
int M, N;
cin >> M;
CreateList(La, M);
cin >> N;
CreateList(Lb, N);
- 定义一个新的链表Lc,并用La的头结点作为Lc的头结点。
ListNode* Lc = La;
- 遍历La和Lb,将较小者的节点插入到Lc的尾部
ListNode* pa = La;
ListNode* pb = Lb;
ListNode* pc = Lc;
while (pa != nullptr && pb != nullptr) {
if (pa->data <= pb->data) {
pc->next = pa;
pa = pa->next;
} else {
pc->next = pb;
pb = pb->next;
}
pc = pc->next;
}
// 将剩余的节点链接到Lc的尾部
if (pa != nullptr) {
pc->next = pa;
} else if (pb != nullptr) {
pc->next = pb;
}
- 最后,遍历输出合并后的有序链表Lc中的所有元素。
pc = Lc;
while (pc != nullptr) {
cout << pc->data << " ";
pc = pc->next;
}
完整的代码如下:
#include <iostream>
using namespace std;
struct ListNode {
int data;
ListNode* next;
};
void CreateList(ListNode*& head, int len) {
for (int i = 0; i < len; i++) {
int num;
cin >> num;
ListNode* newNode = new ListNode();
newNode->data = num;
newNode->next = nullptr;
if (head == nullptr) {
head = newNode;
} else {
ListNode* p = head;
while (p->next != nullptr) {
p = p->next;
}
p->next = newNode;
}
}
}
void MergeList(ListNode* La, ListNode* Lb, ListNode*& Lc) {
Lc = La;
ListNode* pa = La;
ListNode* pb = Lb;
ListNode* pc = Lc;
while (pa != nullptr && pb != nullptr) {
if (pa->data <= pb->data) {
pc->next = pa;
pa = pa->next;
} else {
pc->next = pb;
pb = pb->next;
}
pc = pc->next;
}
if (pa != nullptr) {
pc->next = pa;
} else if (pb != nullptr) {
pc->next = pb;
}
}
int main() {
int M, N;
cin >> M;
ListNode* La = nullptr;
CreateList(La, M);
cin >> N;
ListNode* Lb = nullptr;
CreateList(Lb, N);
ListNode* Lc = nullptr;
MergeList(La, Lb, Lc);
ListNode* pc = Lc;
while (pc != nullptr) {
cout << pc->data << " ";
pc = pc->next;
}
cout << endl;
return 0;
}
希望对你有所帮助!