做一个LA和LB合并的顺序表
时间: 2024-10-25 12:11:22 浏览: 19
合并两个已排序的顺序表(例如LA和LB,它们各自包含升序排列的元素)通常涉及到遍历两个链表并将较小的元素依次添加到新的链表中。下面是一个简单的C++示例:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 合并两个已排序链表
ListNode* mergeTwoSortedLists(ListNode* la, ListNode* lb) {
// 创建一个新的头节点和临时指针
ListNode* head = new ListNode(-1); // 使用一个特殊的值作为初始标记
ListNode* tail = head; // 尾部始终指向当前合并的部分
// 遍历两个链表
while (la != nullptr && lb != nullptr) {
// 如果LA的小于等于LB,将LA的元素添加到新链表
if (la->val <= lb->val) {
tail->next = la;
la = la->next;
} else { // 否则,将LB的元素添加
tail->next = lb;
lb = lb->next;
}
// 移动尾部指针
tail = tail->next;
}
// 添加剩余未处理的部分(如果存在)
if (la != nullptr) {
tail->next = la;
} else {
tail->next = lb;
}
// 返回新链表的头节点
return head->next;
}
int main() {
// 创建示例链表
ListNode* LA = new ListNode(1);
LA->next = new ListNode(3);
LA->next->next = new ListNode(5);
ListNode* LB = new ListNode(2);
LB->next = new ListNode(4);
LB->next->next = new ListNode(6);
// 合并链表
ListNode* mergedList = mergeTwoSortedLists(LA, LB);
// 打印合并后的链表
while (mergedList != nullptr) {
cout << mergedList->val << " ";
mergedList = mergedList->next;
}
cout << endl;
delete LA;
delete LB;
delete mergedList; // 不要忘记释放内存
return 0;
}
```
这个程序会在控制台上打印出合并后的有序链表:1 2 3 4 5 6
阅读全文