File tree 2 files changed +91
-0
lines changed
lcof2/剑指 Offer II 078. 合并排序链表
2 files changed +91
-0
lines changed Original file line number Diff line number Diff line change @@ -363,6 +363,54 @@ def merge_two_lists(l1, l2)
363
363
end
364
364
```
365
365
366
+ #### Swift
367
+
368
+ ``` swift
369
+ /** class ListNode {
370
+ * var val: Int
371
+ * var next: ListNode?
372
+ * init() { self.val = 0; self.next = nil }
373
+ * init(_ val: Int) { self.val = val; self.next = nil }
374
+ * init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next }
375
+ * }
376
+ */
377
+
378
+ class Solution {
379
+ func mergeKLists (_ lists : [ListNode? ]) -> ListNode? {
380
+ let n = lists.count
381
+ if n == 0 {
382
+ return nil
383
+ }
384
+
385
+ var mergedList: ListNode? = lists[0 ]
386
+ for i in 1 ..< n {
387
+ mergedList = mergeLists (mergedList, lists[i])
388
+ }
389
+ return mergedList
390
+ }
391
+
392
+ private func mergeLists (_ l1 : ListNode? , _ l2 : ListNode? ) -> ListNode? {
393
+ let dummy = ListNode ()
394
+ var cur = dummy
395
+ var l1 = l1
396
+ var l2 = l2
397
+
398
+ while let node1 = l1, let node2 = l2 {
399
+ if node1.val <= node2.val {
400
+ cur.next = node1
401
+ l1 = node1.next
402
+ } else {
403
+ cur.next = node2
404
+ l2 = node2.next
405
+ }
406
+ cur = cur.next !
407
+ }
408
+ cur.next = l1 ?? l2
409
+ return dummy.next
410
+ }
411
+ }
412
+ ```
413
+
366
414
<!-- tabs: end -->
367
415
368
416
<!-- solution: end -->
Original file line number Diff line number Diff line change
1
+ /** class ListNode {
2
+ * var val: Int
3
+ * var next: ListNode?
4
+ * init() { self.val = 0; self.next = nil }
5
+ * init(_ val: Int) { self.val = val; self.next = nil }
6
+ * init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next }
7
+ * }
8
+ */
9
+
10
+ class Solution {
11
+ func mergeKLists( _ lists: [ ListNode ? ] ) -> ListNode ? {
12
+ let n = lists. count
13
+ if n == 0 {
14
+ return nil
15
+ }
16
+
17
+ var mergedList : ListNode ? = lists [ 0 ]
18
+ for i in 1 ..< n {
19
+ mergedList = mergeLists ( mergedList, lists [ i] )
20
+ }
21
+ return mergedList
22
+ }
23
+
24
+ private func mergeLists( _ l1: ListNode ? , _ l2: ListNode ? ) -> ListNode ? {
25
+ let dummy = ListNode ( )
26
+ var cur = dummy
27
+ var l1 = l1
28
+ var l2 = l2
29
+
30
+ while let node1 = l1, let node2 = l2 {
31
+ if node1. val <= node2. val {
32
+ cur. next = node1
33
+ l1 = node1. next
34
+ } else {
35
+ cur. next = node2
36
+ l2 = node2. next
37
+ }
38
+ cur = cur. next!
39
+ }
40
+ cur. next = l1 ?? l2
41
+ return dummy. next
42
+ }
43
+ }
You can’t perform that action at this time.
0 commit comments