struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2) {
    // 使用哨兵节点简化处理
    struct ListNode dummy;
    struct ListNode* tail = &dummy;
    dummy.next = NULL;
    while (pHead1 != NULL && pHead2 != NULL) {
        if (pHead1->val <= pHead2->val) {
            tail->next = pHead1;
            pHead1 = pHead1->next;
        } else {
            tail->next = pHead2;
            pHead2 = pHead2->next;
        }
        tail = tail->next;
    }

    // 连接剩余节点
    tail->next = (pHead1 != NULL) ? pHead1 : pHead2;

    return dummy.next;
}

这个题目本身确实不难,但我还是用了好久的时间,核心就是那个链表的基本概念还不清楚。就是这个节点总是换来换去的

他自己的头节点这个很重要,在改变的时候一定要复制一份不然肯定是找不到后续的节点了,这一点很重要,第一次写的程序就是这个问题,自己没找到,还是靠AI帮忙找到的。

这个提交的代码就是AI帮助改的,它是直接新建了一个去保存头节点,对这个节点很重要肯定是需要去保存的。