Skip to content

Commit c6c635d

Browse files
author
Yi Gu
committed
[LinkedList] optimize Solution for Reorder List
1 parent 72e4cd7 commit c6c635d

File tree

1 file changed

+34
-29
lines changed

1 file changed

+34
-29
lines changed

LinkedList/ReorderList.swift

+34-29
Original file line numberDiff line numberDiff line change
@@ -16,52 +16,57 @@
1616

1717
class ReorderList {
1818
func reorderList(head: ListNode?) {
19-
if head == nil || head!.next == nil {
19+
guard let head = head else {
2020
return
2121
}
22-
23-
// split the list
24-
var prev = head
25-
var post = head!.next
26-
22+
23+
var prev: ListNode? = head
24+
var post: ListNode? = head
25+
26+
_split(&prev, &post)
27+
prev = head
28+
29+
post = _reverse(&post)
30+
31+
_merge(&prev, &post)
32+
}
33+
34+
private func _split(inout prev: ListNode?, inout _ post: ListNode?) {
2735
while post != nil && post!.next != nil {
2836
prev = prev!.next
2937
post = post!.next!.next
3038
}
31-
39+
3240
post = prev!.next
3341
prev!.next = nil
34-
prev = head
35-
36-
// reverse the second list
37-
post = _reverse(post)
38-
39-
// merge lists
40-
while prev != nil && post != nil{
41-
let preNext = prev!.next
42-
let posNext = post!.next
43-
44-
prev!.next = post
45-
post!.next = preNext
46-
47-
prev = preNext
48-
post = posNext
49-
}
5042
}
51-
52-
private func _reverse(head: ListNode?) -> ListNode?{
43+
44+
private func _reverse(inout head: ListNode?) -> ListNode? {
5345
var prev = head
5446
var temp: ListNode?
55-
47+
5648
while prev != nil {
5749
let post = prev!.next
58-
50+
5951
prev!.next = temp
60-
52+
6153
temp = prev
6254
prev = post
6355
}
64-
56+
6557
return temp
6658
}
59+
60+
private func _merge(inout prev: ListNode?, inout _ post: ListNode?) {
61+
while prev != nil && post != nil{
62+
let preNext = prev!.next
63+
let posNext = post!.next
64+
65+
prev!.next = post
66+
post!.next = preNext
67+
68+
prev = preNext
69+
post = posNext
70+
}
71+
}
6772
}

0 commit comments

Comments
 (0)