我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii 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;
}
}
}