分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。c++
时间: 2024-11-23 22:39:08 浏览: 22
在 C++ 中,合并两个有序的整数链表可以采用迭代或递归的方式。这里我们先介绍一种常见的迭代方法:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* mergeTwoSortedLists(ListNode* l1, ListNode* l2) {
// 创建一个新的头节点,初始为空
ListNode* head = new ListNode(0);
ListNode* tail = head;
// 当任意一个链表还有元素时
while (l1 != NULL && l2 != NULL) {
// 比较当前两个链表的值,选择较小的那个添加到新链表中
if (l1->val < l2->val) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
// 更新tail指向下一个待插入的位置
tail = tail->next;
}
// 如果其中一个链表已空,则将其剩余部分添加到新链表末尾
if (l1 != NULL) {
tail->next = l1;
} else {
tail->next = l2;
}
return head->next; // 返回合并后的链表头节点
}
// 示例:遍历并打印合并后的链表
void printList(ListNode* node) {
while (node != nullptr) {
cout << node->val << " ";
node = node->next;
}
cout << endl;
}
int main() {
// 初始化两个有序链表
// ...
// 合并链表
ListNode* mergedList = mergeTwoSortedLists(l1, l2);
// 输出合并后的链表
printList(mergedList);
return 0;
}
```
阅读全文