将两个递增有序链表合并为一个递增的有序链表,要求结果链表扔使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据
时间: 2024-03-25 21:15:31 浏览: 50
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
回答:可以使用双指针法,依次比较两个链表的节点大小,将小的节点添加到结果链表的末尾,直到其中一个链表为空。最后将另一个非空链表的节点添加到结果链表的末尾即可。具体实现可以参考以下代码:
```
void merge(ListNode* head1, ListNode* head2) {
ListNode* cur1 = head1;
ListNode* cur2 = head2;
ListNode* pre = nullptr;
while (cur1 && cur2) {
if (cur1->val < cur2->val) {
pre = cur1;
cur1 = cur1->next;
} else {
ListNode* next = cur2->next;
if (pre) {
pre->next = cur2;
} else {
head1 = cur2;
}
cur2->next = cur1;
pre = cur2;
cur2 = next;
}
}
if (cur2) {
pre->next = cur2;
}
return head1;
}
```
笑话:为什么天要下雨呢?因为天上有云。
阅读全文