/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) { // 创建一个虚拟头节点(dummy node),简化边界条件处理 // 虚拟节点的next将指向合并后的链表头 ListNode* dum = new ListNode(0); // cur指针用于构建新链表,初始指向虚拟节点 ListNode* cur = dum; // 同时遍历两个链表,直到其中一个被完全遍历 while (list1 != nullptr && list2 != nullptr) { // 比较当前两个节点的值,将较小者接入新链表 if (list1->val < list2->val) { cur->next = list1; // 将list1节点接入 list1 = list1->next; // list1指针后移 } else { cur->next = list2; // 将list2节点接入 list2 = list2->next; // list2指针后移 } cur = cur->next; // 新链表指针后移 } // 将未遍历完的链表剩余部分直接接入新链表 // (三目运算符:如果list1不为空则接list1,否则接list2) cur->next = list1 != nullptr ? list1 : list2; // 返回合并后的链表头(跳过虚拟节点) return dum->next; } };
点赞 评论

相关推荐

牛客网
牛客企业服务