题目描述(来源)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

思路
需创建一个头结点,然后从两个链表的表头开始依次比较传入的两个链表的结点的大小,并将两个链表中较小的结点尾插到新链表的后面即可。
struct ListNode 
{
	int val;
	struct ListNode *next;
};
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
    // 申请一个新的临时头节点,作为合并后链表的起始点,不存储有效数据
    struct ListNode* guard = (struct ListNode*)malloc(sizeof(struct ListNode));
    // 初始化尾指针,指向临时头节点,用于构建新的有序链表
    struct ListNode* cur = guard;
    // 初始化两个指针分别指向待合并链表l1和l2的当前节点
    struct ListNode* cur1 = list1;
    struct ListNode* cur2 = list2;
    // 当两个链表均未遍历完时执行循环
    while (cur1 && cur2)
    {
        // 比较当前节点的值,将较小节点链接到新链表的尾部
        if (cur1->val < cur2->val)
        {
            cur->next = cur1;
            // 移动l1的当前节点指针到下一个节点
            cur1 = cur1->next;
        }
        else
        {
            cur->next = cur2;
            // 移动l2的当前节点指针到下一个节点
            cur2 = cur2->next;
        }
        // 更新尾指针,使其始终指向新链表的最后一个节点
        cur = cur->next;
    }
    // 将未遍历完的链表剩余部分链接到新链表的尾部
    if (cur1) cur->next = cur1;
    else cur->next = cur2;
    // 新链表的头指针指向临时头节点的下一个节点,即最小值节点
    struct ListNode* head = guard->next;
    // 释放临时头节点,无需在最终链表中保留
    free(guard);
    // 返回合并后的新链表头指针
    return head;
} 
                













![[论文笔记]Root Mean Square Layer Normalization](https://img-blog.csdnimg.cn/img_convert/ebea04d0e75943d4b3eeb5b2449b92db.png)




