class Solution {
public:
// 合并两个已排序链表 a 和 b
ListNode *merge(ListNode *a, ListNode *b) {
// 如果其中一个链表为空,返回另一个链表
if (!a || !b) return a ? a : b;
// 使用虚拟头节点来简化边界情况处理
ListNode dummy;
// temp 指向虚拟头节点,用来构建最终的合并链表
ListNode *temp = &dummy, *a_temp = a, *b_temp = b;
// 逐个比较两个链表的节点,选择较小的节点连接到合并链表上
while (a_temp && b_temp) {
// 如果 a 的当前节点值小于 b 的当前节点值
if (a_temp->val < b_temp->val) {
// 连接 a 的当前节点到 temp 链表中
temp->next = a_temp;
// 移动 a 链表的指针到下一个节点
a_temp = a_temp->next;
} else {
// 连接 b 的当前节点到 temp 链表中
temp->next = b_temp;
// 移动 b 链表的指针到下一个节点
b_temp = b_temp->next;
}
// temp 移动到下一个节点
temp = temp->next;