做法:按照样例1去模拟一遍,一边模拟,一边写代码
这临时节点真的阴间
// 冲刺002
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
// 头节点
ListNode front = new ListNode(-1, head);
// now为当前需要处理节点
ListNode now = front.next;
// 需要翻转的首个元素的前一个
ListNode start = front;
// 需要翻转的末尾元素的下一个
ListNode end = null;
// 临时保存now的下一个元素
ListNode temp = null;
// 临时保存下一组的start
ListNode temp1 = null;
// 临时保存下一次循环的temp
ListNode temp2 = null;
while (now != null) {
now = start.next;
// 获取end
for (int i = 0; i < k; i++) {
if (now == null) {
return front.next;
}
now = now.next;
}
end = now;
// 开始翻转
now = start.next;
temp = now.next;
// 首个节点连接尾部
now.next = end;
temp1 = now;
for (int i = 0; i < k - 1; i++) {
temp2 = temp.next;
temp.next = now;
now = temp;
temp = temp2;
}
// 让start连接翻转后的首部
start.next = now;
start = temp1;
}
return front.next;
}
}