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