两个递增有序链表的合并递减
时间: 2023-09-05 15:13:35 浏览: 110
这个问题可以使用双指针来解决。我们可以定义两个指针,分别指向两个递增有序链表的头节点,然后比较两个指针所指节点的值的大小,将较小的节点加入新的递减有序链表中,并移动指向该节点的指针,直到其中一个链表为空。此时,将剩余的另一个链表中的节点逐一加入新的递减有序链表中即可。
下面是示例代码实现:
```
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* merge(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(0);
ListNode* p = dummy;
while(l1 && l2) {
if(l1->val < l2->val) {
p->next = new ListNode(l1->val);
l1 = l1->next;
} else {
p->next = new ListNode(l2->val);
l2 = l2->next;
}
p = p->next;
}
while(l1) {
p->next = new ListNode(l1->val);
l1 = l1->next;
p = p->next;
}
while(l2) {
p->next = new ListNode(l2->val);
l2 = l2->next;
p = p->next;
}
// 反转链表
ListNode* prev = NULL;
ListNode* curr = dummy->next;
while(curr) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
```
需要注意的是,最后返回的是递减有序链表,因此需要将合并后的链表进行反转。
阅读全文