将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍用原来的存储空间,表中不允许有重复数据。
时间: 2024-03-25 18:31:39 浏览: 27
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
可以使用双指针法,分别指向两个链表的头节点,比较两个节点的大小,将较小的节点加入结果链表中,并将指针后移。直到其中一个链表为空,将另一个链表剩余部分加入结果链表即可。
代码示例:
```
void merge(ListNode* l1, ListNode* l2) {
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode* pre = nullptr;
while (p1 && p2) {
if (p1->val <= p2->val) {
pre = p1;
p1 = p1->next;
} else {
if (pre) pre->next = p2;
pre = p2;
p2 = p2->next;
pre->next = p1;
}
}
if (!p1) pre->next = p2;
}
```
阅读全文