将两个有序链表合并成一个有序表,要求结果链表仍然使用原来两个链表的存储空间,表中不允许有重复数据,用c++
时间: 2024-10-12 12:15:02 浏览: 21
在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循环遍历两个链表,比较节点值并添加到新的有序链表中。当有一个链表遍历完,就将另一个链表剩余部分直接添加到新链表的末尾。
阅读全文