LeetCode_Easy心得:21. Merge Two Sorted Lists(C语言)

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

/** 题目分析:输入两组有序链表,要求输出一组新链表,新链表的要求是:链表内的值也是有序的。 */

Example:

链表l1: 3 -> 6 -> 11 -> NULL;

链表I2:2 -> 5 -> 10 ->NULL;

新链表ret: 2 -> 3 -> 5 -> 6 -> 10 -> 11;


/** 这里需要解释一下什么是链表。在C语言中,关键词struct可以创建结构体变量,刚接触struct时,一般结构体变量内部是常见变量类型(例如int,char,long,double等等),而链表可以看成是一种特殊的结构体,因为该结构体变量内部有至少一个指针变量。 */

/** 本题因为需要输入两组有序链表,因此就本题而言举一个链表创建实例。 */

Example:

struct ListNode {
    int key;                  //链表的值域,此处存放变量具体值;
    struct ListNode *next;    //链表的指针域,用于指向其他链;
};
//此时链表模型创建完毕;

/** 代码分析:本题主要用到的思路是递归。从输入链表的开始部分值域进行比较大小,小的链接在新链表末尾,直至两个链表全部比较完毕。 */


struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *ret;
    if(l1 == NULL)    return l2;    //如果链表l1是空链表,直接返回链表l2;
    if(l2 == NULL)    return l1;    //如果链表l2是空链表,直接返回链表l1;
    
    if(l1->key> l2->key){          //比较两组链表最小值域;
        ret = l2;                  //因为l2值域值更小,所以链接在ret末端;
        ret ->next = mergeTwoLists(l1, l2->next);   //此处用到了递归;
        return ret;
    }else{
        ret = l1;                   //因为l1值域值更小,所以链接在ret末端;
        ret ->next = mergeTwoLists(l1->next, l2);   //此处用到了递归;
        return ret;
    }
}
//当递归最后一层运算结束后,执行最后一层递归函数的return命令;

LeetCode运行时间:6ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值