中小企业门户网站建设策略,设计师培训班多少钱一个月,青岛网站域名备案查询,android系统下载【问题描述】[简单] 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例#xff1a;输入#xff1a;1-2-4, 1-3-4
输出#xff1a;1-1-2-3-4-4【解答思路】
1. 非递归
时间复杂度输入1-2-4, 1-3-4
输出1-1-2-3-4-4
【解答思路】
1. 非递归
时间复杂度O(N) 空间复杂度O(N) public ListNode mergeTwoLists(ListNode l1, ListNode l2) {//新建节点ListNode list new ListNode(0);ListNode l list;while(l1! null l2! null){if(l1.val l2.val){l.next l1 ;l1 l1.next;l l.next;}else {l.next l2;l2 l2.next;l l.next;}}//某一条链表遍历完毕if(l1 null) {l.next l2;}else {l.next l1;}return list.next;}2.递归
递归就是程序内部维护了一个栈。这个题就是每次都把最小值压入栈最后出栈的时候将所有数连在一起就可以了。说白了就是用一个栈维护了顺序。最后的连接当然是小的连小的所以l1 小就连到 l1,l2 小就连到 l2最后先返回的就是最小的头结点
时间复杂度O(NM) 空间复杂度O(1) N M 分别为l1l2两者的长度 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;}}作者guanpengchn
图解链接https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/hua-jie-suan-fa-21-he-bing-liang-ge-you-xu-lian-bi/
【总结】
1.递归 栈
2.链表画图理解