Skip to content

Commit 0bb033f

Browse files
authored
feat: add solutions to lc problem: No.0025 (#3902)
No.0025.Reverse Nodes in k-Group
1 parent 2f30bab commit 0bb033f

File tree

11 files changed

+530
-682
lines changed

11 files changed

+530
-682
lines changed

solution/0000-0099/0025.Reverse Nodes in k-Group/README.md

+162-234
Large diffs are not rendered by default.

solution/0000-0099/0025.Reverse Nodes in k-Group/README_EN.md

+162-234
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode() : val(0), next(nullptr) {}
7+
* ListNode(int x) : val(x), next(nullptr) {}
8+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9+
* };
10+
*/
11+
class Solution {
12+
public:
13+
ListNode* reverseKGroup(ListNode* head, int k) {
14+
ListNode* dummy = new ListNode(0, head);
15+
ListNode* pre = dummy;
16+
17+
while (pre != nullptr) {
18+
ListNode* cur = pre;
19+
for (int i = 0; i < k; i++) {
20+
cur = cur->next;
21+
if (cur == nullptr) {
22+
return dummy->next;
23+
}
24+
}
25+
26+
ListNode* node = pre->next;
27+
ListNode* nxt = cur->next;
28+
cur->next = nullptr;
29+
pre->next = reverse(node);
30+
node->next = nxt;
31+
pre = node;
32+
}
33+
return dummy->next;
34+
}
35+
36+
private:
37+
ListNode* reverse(ListNode* head) {
38+
ListNode* dummy = new ListNode();
39+
ListNode* cur = head;
40+
while (cur != nullptr) {
41+
ListNode* nxt = cur->next;
42+
cur->next = dummy->next;
43+
dummy->next = cur;
44+
cur = nxt;
45+
}
46+
return dummy->next;
47+
}
48+
};

solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.cs

+27-26
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,47 @@
33
* public class ListNode {
44
* public int val;
55
* public ListNode next;
6-
* public ListNode(int val=0, ListNode next=null) {
6+
* public ListNode(int val = 0, ListNode next = null) {
77
* this.val = val;
88
* this.next = next;
99
* }
1010
* }
1111
*/
1212
public class Solution {
1313
public ListNode ReverseKGroup(ListNode head, int k) {
14-
ListNode dummy = new ListNode(0, head);
15-
ListNode pre = dummy, cur = dummy;
16-
while (cur.next != null)
17-
{
18-
for (int i = 0; i < k && cur != null; ++i)
19-
{
14+
var dummy = new ListNode(0);
15+
dummy.next = head;
16+
var pre = dummy;
17+
18+
while (pre != null) {
19+
var cur = pre;
20+
for (int i = 0; i < k; i++) {
21+
if (cur.next == null) {
22+
return dummy.next;
23+
}
2024
cur = cur.next;
2125
}
22-
if (cur == null)
23-
{
24-
return dummy.next;
25-
}
26-
ListNode t = cur.next;
26+
27+
var node = pre.next;
28+
var nxt = cur.next;
2729
cur.next = null;
28-
ListNode start = pre.next;
29-
pre.next = ReverseList(start);
30-
start.next = t;
31-
pre = start;
32-
cur = pre;
30+
pre.next = Reverse(node);
31+
node.next = nxt;
32+
pre = node;
3333
}
34+
3435
return dummy.next;
3536
}
3637

37-
private ListNode ReverseList(ListNode head) {
38-
ListNode pre = null, p = head;
39-
while (p != null)
40-
{
41-
ListNode q = p.next;
42-
p.next = pre;
43-
pre = p;
44-
p = q;
38+
private ListNode Reverse(ListNode head) {
39+
ListNode prev = null;
40+
var cur = head;
41+
while (cur != null) {
42+
var nxt = cur.next;
43+
cur.next = prev;
44+
prev = cur;
45+
cur = nxt;
4546
}
46-
return pre;
47+
return prev;
4748
}
4849
}

solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.go

+23-15
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,36 @@
66
* }
77
*/
88
func reverseKGroup(head *ListNode, k int) *ListNode {
9-
var dummy *ListNode = &ListNode{}
10-
p, cur := dummy, head
11-
for cur != nil {
12-
start := cur
9+
dummy := &ListNode{Next: head}
10+
pre := dummy
11+
12+
for pre != nil {
13+
cur := pre
1314
for i := 0; i < k; i++ {
15+
cur = cur.Next
1416
if cur == nil {
15-
p.Next = start
1617
return dummy.Next
1718
}
18-
cur = cur.Next
1919
}
20-
p.Next, p = reverse(start, cur), start
20+
21+
node := pre.Next
22+
nxt := cur.Next
23+
cur.Next = nil
24+
pre.Next = reverse(node)
25+
node.Next = nxt
26+
pre = node
2127
}
2228
return dummy.Next
2329
}
2430

25-
func reverse(start, end *ListNode) *ListNode {
26-
var pre *ListNode = nil
27-
for start != end {
28-
tmp := start.Next
29-
start.Next, pre = pre, start
30-
start = tmp
31+
func reverse(head *ListNode) *ListNode {
32+
var dummy *ListNode
33+
cur := head
34+
for cur != nil {
35+
nxt := cur.Next
36+
cur.Next = dummy
37+
dummy = cur
38+
cur = nxt
3139
}
32-
return pre
33-
}
40+
return dummy
41+
}

solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.java

+23-21
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,35 @@
1111
class Solution {
1212
public ListNode reverseKGroup(ListNode head, int k) {
1313
ListNode dummy = new ListNode(0, head);
14-
ListNode pre = dummy, cur = dummy;
15-
while (cur.next != null) {
16-
for (int i = 0; i < k && cur != null; ++i) {
14+
dummy.next = head;
15+
ListNode pre = dummy;
16+
while (pre != null) {
17+
ListNode cur = pre;
18+
for (int i = 0; i < k; i++) {
1719
cur = cur.next;
20+
if (cur == null) {
21+
return dummy.next;
22+
}
1823
}
19-
if (cur == null) {
20-
return dummy.next;
21-
}
22-
ListNode t = cur.next;
24+
ListNode node = pre.next;
25+
ListNode nxt = cur.next;
2326
cur.next = null;
24-
ListNode start = pre.next;
25-
pre.next = reverseList(start);
26-
start.next = t;
27-
pre = start;
28-
cur = pre;
27+
pre.next = reverse(node);
28+
node.next = nxt;
29+
pre = node;
2930
}
3031
return dummy.next;
3132
}
3233

33-
private ListNode reverseList(ListNode head) {
34-
ListNode pre = null, p = head;
35-
while (p != null) {
36-
ListNode q = p.next;
37-
p.next = pre;
38-
pre = p;
39-
p = q;
34+
private ListNode reverse(ListNode head) {
35+
ListNode dummy = new ListNode();
36+
ListNode cur = head;
37+
while (cur != null) {
38+
ListNode nxt = cur.next;
39+
cur.next = dummy.next;
40+
dummy.next = cur;
41+
cur = nxt;
4042
}
41-
return pre;
43+
return dummy.next;
4244
}
43-
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,59 @@
1-
# Definition for singly-linked list.
2-
# class ListNode {
3-
# public $val;
4-
# public $next;
5-
# public function __construct($val = 0, $next = null)
6-
# {
7-
# $this->val = $val;
8-
# $this->next = $next;
9-
# }
10-
# }
11-
1+
/**
2+
* Definition for a singly-linked list.
3+
* class ListNode {
4+
* public $val = 0;
5+
* public $next = null;
6+
* function __construct($val = 0, $next = null) {
7+
* $this->val = $val;
8+
* $this->next = $next;
9+
* }
10+
* }
11+
*/
1212
class Solution {
1313
/**
1414
* @param ListNode $head
15-
* @param int $k
15+
* @param Integer $k
1616
* @return ListNode
1717
*/
18-
1918
function reverseKGroup($head, $k) {
2019
$dummy = new ListNode(0);
2120
$dummy->next = $head;
22-
$prevGroupTail = $dummy;
21+
$pre = $dummy;
2322

24-
while ($head !== null) {
25-
$count = 0;
26-
$groupHead = $head;
27-
$groupTail = $head;
28-
29-
while ($count < $k && $head !== null) {
30-
$head = $head->next;
31-
$count++;
32-
}
33-
if ($count < $k) {
34-
$prevGroupTail->next = $groupHead;
35-
break;
36-
}
37-
38-
$prev = null;
23+
while ($pre !== null) {
24+
$cur = $pre;
3925
for ($i = 0; $i < $k; $i++) {
40-
$next = $groupHead->next;
41-
$groupHead->next = $prev;
42-
$prev = $groupHead;
43-
$groupHead = $next;
26+
if ($cur->next === null) {
27+
return $dummy->next;
28+
}
29+
$cur = $cur->next;
4430
}
45-
$prevGroupTail->next = $prev;
46-
$prevGroupTail = $groupTail;
31+
32+
$node = $pre->next;
33+
$nxt = $cur->next;
34+
$cur->next = null;
35+
$pre->next = $this->reverse($node);
36+
$node->next = $nxt;
37+
$pre = $node;
4738
}
4839

4940
return $dummy->next;
5041
}
42+
43+
/**
44+
* Helper function to reverse a linked list.
45+
* @param ListNode $head
46+
* @return ListNode
47+
*/
48+
function reverse($head) {
49+
$prev = null;
50+
$cur = $head;
51+
while ($cur !== null) {
52+
$nxt = $cur->next;
53+
$cur->next = $prev;
54+
$prev = $cur;
55+
$cur = $nxt;
56+
}
57+
return $prev;
58+
}
5159
}

solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.py

+18-18
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,28 @@
44
# self.val = val
55
# self.next = next
66
class Solution:
7-
def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
8-
def reverseList(head):
9-
pre, p = None, head
10-
while p:
11-
q = p.next
12-
p.next = pre
13-
pre = p
14-
p = q
15-
return pre
7+
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
8+
def reverse(head: Optional[ListNode]) -> Optional[ListNode]:
9+
dummy = ListNode()
10+
cur = head
11+
while cur:
12+
nxt = cur.next
13+
cur.next = dummy.next
14+
dummy.next = cur
15+
cur = nxt
16+
return dummy.next
1617

17-
dummy = ListNode(next=head)
18-
pre = cur = dummy
19-
while cur.next:
18+
dummy = pre = ListNode(next=head)
19+
while pre:
20+
cur = pre
2021
for _ in range(k):
2122
cur = cur.next
2223
if cur is None:
2324
return dummy.next
24-
t = cur.next
25+
node = pre.next
26+
nxt = cur.next
2527
cur.next = None
26-
start = pre.next
27-
pre.next = reverseList(start)
28-
start.next = t
29-
pre = start
30-
cur = pre
28+
pre.next = reverse(node)
29+
node.next = nxt
30+
pre = node
3131
return dummy.next

0 commit comments

Comments
 (0)