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

来源:互联网 发布:如何用手机检查网络 编辑:程序博客网 时间:2024/05/22 20:00

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

原创粉丝点击