
#include <stdio.h>
#include <stdlib.h>struct ListNode {int val;struct ListNode *next;};
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {/* 1. 创建虚拟头结点 */struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));head->next = NULL;struct ListNode *cur = head;/* 2. 双指针归并 */while (list1 && list2) {if (list1->val <= list2->val) {cur->next = list1; /* 直接挂接原结点,无需 malloc */list1 = list1->next;} else {cur->next = list2;list2 = list2->next;}cur = cur->next;}/* 3. 把剩余链表直接接上 */cur->next = list1 ? list1 : list2;/* 4. 保存结果并释放虚拟头结点 */struct ListNode *real_head = head->next;free(head);return real_head;
}
