将两个升序链表合并为一个新的升序链表并返回
时间: 2023-08-07 14:05:24 浏览: 137
题目描述:
将两个升序链表合并为一个新的升序链表并返回。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题思路:
使用双指针法,将两个链表中的节点逐一比较,将较小的节点加入到新的链表中,直到其中一个链表为空,再将另一个链表中剩余的节点加入到新的链表中。
代码实现:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(); // 新链表的虚拟头节点
ListNode* cur = dummy; // 新链表的当前节点
while (l1 && l2) { // 两个链表都不为空时
if (l1->val < l2->val) { // l1的节点值小于l2的节点值
cur->next = l1; // 将l1的节点加入到新链表中
l1 = l1->next; // l1指针后移
} else { // l2的节点值小于等于l1的节点值
cur->next = l2; // 将l2的节点加入到新链表中
l2 = l2->next; // l2指针后移
}
cur = cur->next; // 新链表的当前节点后移
}
cur->next = l1 ? l1 : l2; // 将剩余的节点加入到新链表中
return dummy->next; // 返回新链表的头节点
}
};
阅读全文