合并两个有序链表

21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:
在这里插入图片描述

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:
输入:l1 = [], l2 = []
输出:[]

示例 3:
输入:l1 = [], l2 = [0]
输出:[0]

提示:

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按非递减顺序排列

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
   //第一种情况,其中一个链表为空
   //第二种情况,两个链表为空的情况,返回另一个空链表
    if(list1 == NULL )
    return list2;
    else if(list2 == NULL)
    return list1;

    struct ListNode* list = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* plist = list;//合并表的标记指针
    struct ListNode* plist1 = list1;//表1的标记指针
    struct ListNode* plist2 = list2;//表2的标记指针
    
		//第三种情况,链表都不为空
        while(plist1 != NULL && plist2 != NULL)
        {
             //如果表1中值小于等于表2中值
            if(plist1->val <= plist2->val)
            {
                plist->next = plist1;
                plist1 = plist1->next;
                plist = plist->next;
                plist->next= NULL;
            }
            //如果表2中值小于等于表1中值
            else
            {
                plist->next = plist2;
                plist2 = plist2->next;
                plist = plist->next;
                plist->next = NULL;
            }
        }
        //while循环出来后,必定至少有一个表为空,则直接连接剩余不为空的表
       if(plist1)
           plist->next = plist1;
       if(plist2) 
           plist->next = plist2;
           //前面用plist->next连接的第一个值,所以返回list.next
       return list->next;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值