将两个非递减的有序链表合并为一个非递减的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。链表合并后清空原链表。
时间: 2023-05-20 13:03:18 浏览: 93
以下是合并两个非递减有序链表的代码:
```c++
void merge(ListNode* l1, ListNode* l2) {
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode* prev = nullptr;
while (p1 && p2) {
if (p1->val <= p2->val) {
prev = p1;
p1 = p1->next;
} else {
if (prev) {
prev->next = p2;
}
prev = p2;
p2 = p2->next;
prev->next = p1;
}
}
if (!p1) {
prev->next = p2;
}
l2 = nullptr;
}
```
这个函数接受两个链表的头指针作为参数,将它们合并为一个非递减有序链表,并将原链表清空。
阅读全文