title: leetcode-21-合并两个有序链表
date: 2019-09-06 16:01:01
categories:
- leetcode
tags: - leetcode
合并两个有序链表
-
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 -
解法:没啥需要考虑的,时间复杂度只要遍历两个链表之间最长的就够了
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode l3 = new ListNode(0); ListNode l4 = l3; while(l1!=null&&l2!=null) { if(l1.val>l2.val) { l3.next = l2; l2 = l2.next; }else{ l3.next = l1; l1 = l1.next; } l3 = l3.next; } if(l1==null) { l3.next = l2; }else{ l3.next = l1; } return l4.next; } }
-
友情提示:22题考虑k个有序链表:可以使用分治算法,把这个方法当工具类就好
-
当然循环是可以改成递归的,这个代码当然也不例外,看代码
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { //先写循环终止条件 if(l1==null) return l2; if(l2==null) return l1; if(l1.val<l2.val){ l1.next = mergeTwoLists(l1.next,l2); return l1; }else{ l2.next = mergeTwoLists(l1,l2.next); return l2; } } }
但是一般来说,能不用递归的尽量不用递归