#include <iostream>struct ListNode {int val;ListNode* next;ListNode(int x) : val(x), next(nullptr) {}
};class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode dummy = ListNode(-1); // 创建一个虚拟节点作为头节点ListNode* prev = &dummy; // prev指向虚拟节点// 当l1和l2均不为空时执行循环while (l1 != nullptr && l2 != nullptr) {// 比较l1和l2节点的值if (l1->val < l2->val) {prev->next = l1; // 将prev的下一个节点指向l1l1 = l1->next; // l1指针后移}else {prev->next = l2; // 将prev的下一个节点指向l2l2 = l2->next; // l2指针后移}prev = prev->next; // prev指针后移}// 将剩余的节点连接到合并后的链表//prev->next = l1 == nullptr ? l2 : l1;// 返回合并后链表的头节点return dummy.next;}
};// 测试程序
int main() {ListNode* l1 = new ListNode(1);l1->next = new ListNode(2);l1->next->next = new ListNode(4);ListNode* l2 = new ListNode(1);l2->next = new ListNode(3);l2->next->next = new ListNode(4);Solution sol;ListNode* mergedList = sol.mergeTwoLists(l1, l2);// 输出合并后的链表std::cout << "Merged List: ";while (mergedList != nullptr) {std::cout << mergedList->val;if (mergedList->next != nullptr) {std::cout << "->";}mergedList = mergedList->next;}std::cout << std::endl;return 0;
}