-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0092.Reverse Linked List II.swift
51 lines (42 loc) · 1.13 KB
/
0092.Reverse Linked List II.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
* Definition for singly-linked list.
* public class ListNode {
* public var val: Int
* public var next: ListNode?
* public init() { self.val = 0; self.next = nil; }
* public init(_ val: Int) { self.val = val; self.next = nil; }
* public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
* }
*/
class Solution {
func reverseBetween(_ head: ListNode?, _ left: Int, _ right: Int) -> ListNode? {
var l = left
var r = right
var head = head
var pointer = head
var prev: ListNode? = nil
while l > 1 {
prev = pointer
pointer = pointer?.next
l -= 1
r -= 1
}
var prevEnd = prev
var tail = pointer
var scanner: ListNode? = nil
while r > 0 {
scanner = pointer?.next
pointer?.next = prev
prev = pointer
pointer = scanner
r -= 1
}
if prevEnd != nil {
prevEnd!.next = prev
} else {
head = prev
}
tail?.next = pointer
return head
}
}