File tree 1 file changed +49
-0
lines changed
1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * Question Link: https://leetcode.com/problems/reverse-nodes-in-k-group/
3
+ * Primary idea: Reverse one group during one loop. Construct a reversed group from back to forth.
4
+ * Time Complexity: O(n), Space Complexity: O(1)
5
+ *
6
+ * Definition for singly-linked list.
7
+ * public class ListNode {
8
+ * public var val: Int
9
+ * public var next: ListNode?
10
+ * public init(_ val: Int) {
11
+ * self.val = val
12
+ * self.next = nil
13
+ * }
14
+ * }
15
+ */
16
+
17
+ class ReverseNodesInKGroup {
18
+ func reverseKGroup( _ head: ListNode ? , _ k: Int ) -> ListNode ? {
19
+ let dummy = ListNode ( 0 )
20
+ dummy. next = head
21
+
22
+ var prev = dummy // prev = A
23
+ while prev. next != nil { // A->B->C->D->E => A->D->C->B->E
24
+ var groupTail : ListNode ? = prev
25
+ for _ in 1 ... k {
26
+ groupTail = groupTail? . next
27
+ }
28
+ guard groupTail != nil else { // groupTail = D
29
+ break
30
+ }
31
+
32
+ let nextGroupHead = groupTail!. next // nextGroupHead = E
33
+ var last = nextGroupHead // last = E
34
+ var current : ListNode ? = prev. next! // current = B
35
+ while current != nil && current !== nextGroupHead {
36
+ let next = current!. next // next = C
37
+ current!. next = last // B -> E
38
+ last = current // last = B
39
+ current = next // current = C
40
+ }
41
+
42
+ groupTail = prev. next
43
+ prev. next = last
44
+ prev = groupTail!
45
+ }
46
+
47
+ return dummy. next
48
+ }
49
+ }
You can’t perform that action at this time.
0 commit comments