Skip to content

Commit d90b1ed

Browse files
authored
feat: add swift implementation to lcof2 problem: No.078 (doocs#3457)
1 parent b043292 commit d90b1ed

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

lcof2/剑指 Offer II 078. 合并排序链表/README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,54 @@ def merge_two_lists(l1, l2)
363363
end
364364
```
365365

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+
366414
<!-- tabs:end -->
367415

368416
<!-- solution:end -->
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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+
}

0 commit comments

Comments
 (0)