将两个有序链表合并成一个有序表,要求结果链表仍然使用原来两个链表的存储空间,表中不允许有重复数据,用c++
时间: 2024-10-12 09:15:02 浏览: 32
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
在C++中,将两个已排序的链表合并成一个新的有序链表,可以采用迭代或递归的方式实现。这里我们以迭代的方式来举例,这种方法不需要额外的空间,利用了双指针技术。
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == nullptr) return l2;
if (l2 == nullptr) return l1;
// 创建新链表并初始化头节点
ListNode* head = new ListNode(std::min(l1->val, l2->val));
ListNode* current = head;
while (l1 != nullptr && l2 != nullptr) {
// 比较当前节点值,选择较小的一个添加到新链表
if (l1->val < l2->val || (l1->val == l2->val && l1->next == nullptr)) {
current->next = l1;
l1 = l1->next;
} else {
current->next = l2;
l2 = l2->next;
}
current = current->next;
}
// 如果其中一个链表还有剩余元素,则直接添加
if (l1 != nullptr) current->next = l1;
else current->next = l2;
return head;
}
```
在这个函数中,我们首先检查两个链表的头节点,然后通过while循环遍历两个链表,比较节点值并添加到新的有序链表中。当有一个链表遍历完,就将另一个链表剩余部分直接添加到新链表的末尾。
阅读全文