合并两个有序链表(简单)
题目要求
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
1 | 输入:1->2->4, 1->3->4 |
一个小菜鸡的菜鸡 c++ 解法,执行用时 16ms,内存消耗 9MB,还会继续探索更优化的方法和 java 语言的解法!
C++递归解法
下面是题目给出的 C++ 链表定义
1 | /** |
思路
根据给出的题干要求,想到用递归的方法,逐个同时检测链表 l1 和 l2 中每一个数据值的大小,通过判断大小后对链表的重新排序,来得到合并后的有序链表
代码
1 | class Solution { |
解释
先分别判断两个链表是否为空,如果有一个链表为空,直接返回另一个链表就可以了。接着就到了关键的递归环节,这里对于刚传进来的 l1 和 l2 来说,都代表两个链表的第一个节点,保留含有较小的值得节点,再对该节点的 next 节点和另一个链表使用 mergeTwoLists() 函数,这样,函数就会通过不断地递归,来检测出两个链表的剩余节点中值较小的那个,最后在当一个链表已经被取空之后,函数的递归调用就会停止,从而将两个有序链表合并为一个有序链表