import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public static ListNode reverseKGroup(ListNode head, int k) {
if (k == 1 || head == null) {
return head;
}
//当前对象
ListNode currentNode = head;
//序号
int i = 1;
//返回对象
ListNode resultNode = null;
//上一轮的最前面那个,翻转后会在最后
ListNode preNode = head;
//每组的第一个节点
ListNode start = head;
//临时节点,用于断开连接
ListNode temp;
boolean isDivisible = false;
while (currentNode != null) {
if (i % k == 1) {
start = currentNode;
currentNode = currentNode.next;
isDivisible = false;
} else if (i % k == 0) {
temp = currentNode.next;
currentNode.next = null;
currentNode = temp;
ListNode reverseNode = reverseList(start);
if (resultNode == null) {
resultNode = reverseNode;
} else {
preNode.next = reverseNode;
}
preNode = start;
isDivisible = true;
} else {
currentNode = currentNode.next;
}
i++;
}
if (!isDivisible && resultNode != null) {
preNode.next = start;
}
return resultNode == null ? start : resultNode;
}
public static ListNode reverseList(ListNode head) {
if (head != null && head.next != null && head.next.next != null) {
ListNode preNode = head;
ListNode current = head.next;
ListNode nextNode;
//最开始的头节点指向空
preNode.next = null;
while (current != null) {
//先获取下一个节点
nextNode = current.next;
//当前节点指向上一个节点
current.next = preNode;
//上一个节点赋值为当前节点
preNode = current;
//当前节点往后走一步
current = nextNode;
}
return preNode;
} else if (head != null && head.next != null && head.next.next == null) {
ListNode nextNode = head.next;
head.next = null;
nextNode.next = head;
return nextNode;
} else {
return head;
}
}
}