LeetCode 21. 合并两个有序链表

2020-05-22 16:11:44来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

LeetCode 21. 合并两个有序链表

我的LeetCode:https://leetcode-cn.com/u/ituring/

我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii

LeetCode 21. 合并两个有序链表

题目

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

思路1-迭代

注意保留头结点用以返回;

算法复杂度: n为两个链表的总长

  • 时间复杂度: $ {\color{Magenta}{\Omicron\left(n\right)}} $
  • 空间复杂度: $ {\color{Magenta}{\Omicron\left(1\right)}} $

思路2-递归

递归代码比较简短;

算法复杂度: n为两个链表的总长

  • 时间复杂度: $ {\color{Magenta}{\Omicron\left(n\right)}} $
  • 空间复杂度: $ {\color{Magenta}{\Omicron\left(n\right)}} $

算法源码示例

package leetcode;

/**
 * @author ZhouJie
 * @date 2020年1月6日 下午11:40:27 
 * @Description: 21. 合并两个有序链表
 *
 */
public class LeetCode_0021 {

}

// Definition for singly-linked list.
class ListNode_0021 {
	int val;
	ListNode_0021 next;

	ListNode_0021(int x) {
		val = x;
	}
}

class Solution_0021 {
	/**
	 * @author: ZhouJie
	 * @date: 2020年5月22日 下午9:30:41 
	 * @param: @param l1
	 * @param: @param l2
	 * @param: @return
	 * @return: ListNode_0021
	 * @Description: 1-迭代;
	 *
	 */
	public ListNode_0021 mergeTwoLists_1(ListNode_0021 l1, ListNode_0021 l2) {
		if (l1 == null || l2 == null) {
			return l1 == null ? l2 : l1;
		}
		ListNode_0021 dummy = new ListNode_0021(0);
		ListNode_0021 node = dummy;
		while (l1 != null && l2 != null) {
			if (l1.val < l2.val) {
				dummy.next = l1;
				dummy = l1;
				l1 = l1.next;
			} else {
				dummy.next = l2;
				dummy = l2;
				l2 = l2.next;
			}
		}
		dummy.next = l1 == null ? l2 : l1;
		return node.next;
	}

	/**
	 * @author: ZhouJie
	 * @date: 2020年5月22日 下午9:30:51 
	 * @param: @param l1
	 * @param: @param l2
	 * @param: @return
	 * @return: ListNode_0021
	 * @Description: 2-递归;
	 *
	 */
	public ListNode_0021 mergeTwoLists_2(ListNode_0021 l1, ListNode_0021 l2) {
		if (l1 == null) {
			return l2;
		} else if (l2 == null) {
			return l1;
		} else if (l1.val < l2.val) {
			l1.next = mergeTwoLists_2(l1.next, l2);
			return l1;
		} else {
			l2.next = mergeTwoLists_2(l1, l2.next);
			return l2;
		}
	}
}


原文链接:https://www.cnblogs.com/izhoujie/p/12939879.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:架构设计 | 接口幂等性原则,防重复提交Token管理

下一篇:LeetCode 5. 最长回文子串