(1)将两个递增的有序链表合并一个递增的有序链表。要求结果链表仍使用原来两个 链表的存储空间,不另外占用其它的存储空间。表中不允许有重复的数据。C++代码
时间: 2024-10-19 08:04:57 浏览: 30
在C++中,合并两个递增的有序链表通常可以使用迭代或递归的方式,由于题目要求在原链表上操作,我们不需要额外的空间。这里是一个简单的迭代解决方案:
```cpp
// 定义链表节点结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建一个新的头节点作为合并后的链表起点
ListNode* dummy = new ListNode(0);
ListNode* tail = dummy; // 尾节点指向当前链表的最后一个位置
while (l1 && l2) { // 只要其中一个列表还有元素
if (l1->val < l2->val) {
tail->next = l1; // 将较小值的节点添加到当前链表
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next; // 更新尾节点指针
}
// 如果其中一个列表已经遍历完,则将剩余的那个列表连接到最后
if (l1)
tail->next = l1;
else
tail->next = l2;
return dummy->next; // 返回新链表的头节点
}
```
这个函数接收两个链表的头节点作为输入,通过比较它们的节点值并逐个添加到合并后的链表中,最终返回新的有序链表的头节点。
阅读全文