![]()
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if(head == null || head.next == null || k == 1) return head;
ListNode node = head;
int m = k;
while(m-- != 0) {
if(node == null) return head;
node = node.next;
}
ListNode pre = reverse(head,node); // 每次找到这k个进行翻转 返回值为翻转后的头
head.next = reverseKGroup(node,k); // 当前头会被翻转指向下一次翻转k个的返回值
return pre;
}
public ListNode reverse(ListNode head, ListNode newNode) { // 根据起点终点反转一段链表
if(head == newNode || head.next == newNode) return head;
ListNode node = reverse(head.next,newNode);
head.next.next = head;
head.next = newNode; // 只有这里不同,翻转整个链表这里指向null
return node;
}
}