Skip to content

Commit d778272

Browse files
Merge pull request #2965 from drxlx/0025-reverse-nodes-in-k-group
Create 0025-reverse-nodes-in-k-group.swift
2 parents 0a2c2b2 + 3bcc17d commit d778272

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* Question Link: https://leetcode.com/problems/reverse-nodes-in-k-group/
3+
*/
4+
5+
/**
6+
* Definition for singly-linked list.
7+
* public class ListNode {
8+
* public var val: Int
9+
* public var next: ListNode?
10+
* public init() { self.val = 0; self.next = nil; }
11+
* public init(_ val: Int) { self.val = val; self.next = nil; }
12+
* public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
13+
* }
14+
*/
15+
16+
class ReverseKGroup {
17+
func reverseKGroup(_ head: ListNode?, _ k: Int) -> ListNode? {
18+
var dummy = ListNode(0, head)
19+
var groupPrev: ListNode? = dummy
20+
21+
while true {
22+
let kth = getKth(current: groupPrev, k: k)
23+
if kth == nil {
24+
break
25+
}
26+
27+
let groupNext = kth?.next
28+
29+
var prev = kth?.next
30+
var current = groupPrev?.next
31+
while current !== groupNext {
32+
let temp = current?.next
33+
current?.next = prev
34+
prev = current
35+
current = temp
36+
}
37+
38+
let temp = groupPrev?.next
39+
groupPrev?.next = kth
40+
groupPrev = temp
41+
}
42+
43+
return dummy.next
44+
}
45+
46+
func getKth(current: ListNode?, k: Int) -> ListNode? {
47+
var current = current
48+
var k = k
49+
50+
while current != nil && k > 0 {
51+
current = current?.next
52+
k -= 1
53+
}
54+
55+
return current
56+
}
57+
}

0 commit comments

Comments
 (0)