将两个递增的有序链表合并为一个递增的有序链表,要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间.表中不允许有重复的数据
时间: 2023-10-18 10:09:26 浏览: 77
这个问题可以使用双指针来解决。首先判断两个链表的头节点,然后将较小的节点作为合并后的链表的头节点。接着,将较小节点的下一个节点与另一个链表的当前节点进行比较,将较小的节点插入合并后的链表中。重复这个过程,直到其中一个链表为空,最后将另一个链表中剩余的节点直接插入到合并后的链表中即可。
以下是示例代码实现:
```
void merge(ListNode* head1, ListNode* head2) {
if (head1 == nullptr || head2 == nullptr) {
return;
}
ListNode* p1 = head1;
ListNode* p2 = head2;
ListNode* pre = nullptr;
while (p1 != nullptr && p2 != nullptr) {
if (p1->val <= p2->val) {
pre = p1;
p1 = p1->next;
} else {
if (pre != nullptr) {
pre->next = p2;
}
pre = p2;
p2 = p2->next;
pre->next = p1;
}
}
if (p1 == nullptr) {
pre->next = p2;
}
}
```
阅读全文