c++将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链 表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。
时间: 2024-10-13 18:12:41 浏览: 35
在C++中,合并两个递增的有序链表可以采用迭代或者递归的方式来实现,这里我们介绍一种常见的迭代方法。这种方法不需要额外的空间,并保持原有的链表节点。
假设我们有两个指针 `p1` 和 `p2` 分别指向第一个链表的头结点和第二个链表的头结点,同时有一个空的链表头指针 `dummy` 和临时指针 `current`。
```cpp
// 定义链表节点结构
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* mergeTwoLists(ListNode* p1, ListNode* p2) {
// 创建一个虚拟头节点,用于简化后续操作
ListNode* dummy = new ListNode(0);
ListNode* current = dummy;
// 当两个链表非空并且还有节点剩余时
while (p1 && p2) {
// 如果p1节点值小于p2节点值,则添加p1到结果链表
if (p1->val < p2->val) {
current->next = p1;
p1 = p1->next;
}
// 否则添加p2
else {
current->next = p2;
p2 = p2->next;
}
// 指针移动到下一个节点
current = current->next;
}
// 如果其中一个链表已遍历完,将另一个链表剩余部分添加到结果链表
if (p1)
current->next = p1;
else
current->next = p2;
// 返回结果链表的头节点
return dummy->next;
}
```
阅读全文