21.合并两个有序链表

#include 

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的下一个节点指向l1
                l1 = l1->next; // l1指针后移
            }
            else {
                prev->next = l2; // 将prev的下一个节点指向l2
                l2 = 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;
}

你可能感兴趣的:(力扣,链表,数据结构,leetcode)