@@ -44,7 +44,7 @@ https://leetcode-cn.com/problems/merge-two-sorted-lists
4444
4545## 代码
4646
47- - 语言支持:CPP, JS
47+ - 语言支持:CPP, JS, Java, Python
4848
4949CPP Code:
5050
@@ -99,6 +99,45 @@ const mergeTwoLists = function (l1, l2) {
9999};
100100```
101101
102+ Java Code:
103+
104+ ``` java
105+ class Solution {
106+ public ListNode mergeTwoLists (ListNode l1 , ListNode l2 ) {
107+ if (l1 == null ) {
108+ return l2;
109+ }
110+ else if (l2 == null ) {
111+ return l1;
112+ }
113+ else if (l1. val < l2. val) {
114+ l1. next = mergeTwoLists(l1. next, l2);
115+ return l1;
116+ }
117+ else {
118+ l2. next = mergeTwoLists(l1, l2. next);
119+ return l2;
120+ }
121+
122+ }
123+ }
124+ ```
125+
126+ Python Code:
127+
128+ ``` py
129+ class Solution :
130+ def mergeTwoLists (self , l1 : ListNode, l2 : ListNode) -> ListNode:
131+ if not l1: return l2 # 终止条件,直到两个链表都空
132+ if not l2: return l1
133+ if l1.val <= l2.val: # 递归调用
134+ l1.next = self .mergeTwoLists(l1.next,l2)
135+ return l1
136+ else :
137+ l2.next = self .mergeTwoLists(l1,l2.next)
138+ return l2
139+ ```
140+
102141** 复杂度分析**
103142
104143M、N 是两条链表 l1、l2 的长度
@@ -156,6 +195,56 @@ var mergeTwoLists = function (l1, l2) {
156195};
157196```
158197
198+ 迭代的Java代码如下:
199+
200+ ``` java
201+ class Solution {
202+ public ListNode mergeTwoLists (ListNode l1 , ListNode l2 ) {
203+ ListNode prehead = new ListNode (- 1 );
204+
205+ ListNode prev = prehead;
206+ while (l1 != null && l2 != null ) {
207+ if (l1. val <= l2. val) {
208+ prev. next = l1;
209+ l1 = l1. next;
210+ } else {
211+ prev. next = l2;
212+ l2 = l2. next;
213+ }
214+ prev = prev. next;
215+ }
216+
217+ // 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
218+ prev. next = l1 == null ? l2 : l1;
219+
220+ return prehead. next;
221+ }
222+ }
223+ ```
224+
225+ 迭代的Python代码如下:
226+
227+ ``` py
228+ class Solution :
229+ def mergeTwoLists (self , l1 : ListNode, l2 : ListNode) -> ListNode:
230+ prehead = ListNode(- 1 )
231+
232+ prev = prehead
233+ while l1 and l2:
234+ if l1.val <= l2.val:
235+ prev.next = l1
236+ l1 = l1.next
237+ else :
238+ prev.next = l2
239+ l2 = l2.next
240+ prev = prev.next
241+
242+ # 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
243+ prev.next = l1 if l1 is not None else l2
244+
245+ return prehead.next
246+ ```
247+
159248大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 40K star 啦。
160249大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
161250
0 commit comments