@@ -71,7 +71,7 @@ ListNode reverse(ListNode a) {
71
71
「反转以 ` a ` 为头结点的链表」其实就是「反转 ` a ` 到 null 之间的结点」,那么如果让你「反转 ` a ` 到 ` b ` 之间的结点」,你会不会?
72
72
73
73
只要更改函数签名,并把上面的代码中 ` null ` 改成 ` b ` 即可:
74
-
74
+ [ labuladong ] ( https://github.com/labuladong ) 提供Java解法代码:
75
75
``` java
76
76
/* * 反转区间 [a, b) 的元素,注意是左闭右开 */
77
77
ListNode reverse(ListNode a, ListNode b) {
@@ -88,9 +88,23 @@ ListNode reverse(ListNode a, ListNode b) {
88
88
return pre;
89
89
}
90
90
```
91
+ [ renxiaoyao] ( https://github.com/tianzhongwei ) 提供C++解法代码:
92
+ ``` C++
93
+ ListNode* reverse (ListNode* begin,ListNode* end) {
94
+ ListNode* newHead = nullptr;
95
+ ListNode* cur = begin;
96
+ while(cur != end) {
97
+ ListNode* next = cur->next;
98
+ cur->next = newHead;
99
+ newHead = cur;
100
+ cur = next;
101
+ }
102
+ return newHead;
103
+ }
104
+ ```
91
105
92
106
现在我们迭代实现了反转部分链表的功能,接下来就按照之前的逻辑编写 `reverseKGroup` 函数即可:
93
-
107
+ [labuladong](https://github.com/labuladong) 提供Java解法代码:
94
108
```java
95
109
ListNode reverseKGroup(ListNode head, int k) {
96
110
if (head == null) return null;
@@ -109,7 +123,37 @@ ListNode reverseKGroup(ListNode head, int k) {
109
123
return newHead;
110
124
}
111
125
```
112
-
126
+ [ renxiaoyao] ( https://github.com/tianzhongwei ) 提供C++解法代码:
127
+ ``` C++
128
+ class Solution {
129
+ public:
130
+ ListNode* reverseKGroup(ListNode* head, int k) {
131
+ if(!head) return head;
132
+ ListNode* begin = head;
133
+ ListNode* end = head;
134
+ for(int i = 0 ; i < k ; ++i) {
135
+ if(!end)
136
+ return head;
137
+ end = end->next;
138
+ }
139
+ ListNode* newHead = reverse(begin,end);
140
+ begin->next = reverseKGroup(end,k);
141
+ return newHead;
142
+ }
143
+ private:
144
+ ListNode* reverse(ListNode* begin,ListNode* end) {
145
+ ListNode* newHead = nullptr;
146
+ ListNode* cur = begin;
147
+ while(cur != end) {
148
+ ListNode* next = cur->next;
149
+ cur->next = newHead;
150
+ newHead = cur;
151
+ cur = next;
152
+ }
153
+ return newHead;
154
+ }
155
+ };
156
+ ```
113
157
解释一下 `for` 循环之后的几句代码,注意 `reverse` 函数是反转区间 `[a, b)`,所以情形是这样的:
114
158
115
159

@@ -135,4 +179,4 @@ ListNode reverseKGroup(ListNode head, int k) {
135
179
136
180
[下一篇:如何判定括号合法性](../高频面试系列/合法括号判定.md)
137
181
138
- [ 目录] ( ../README.md#目录 )
182
+ [目录](../README.md#目录)
0 commit comments