思路:利用栈的先进后出原理进行反转,根据k求出链表分为多少组,将每组的链表利用栈依次反转再拼接
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
Stack<ListNode> stack = new Stack<>();
//创建表头
ListNode res = new ListNode(-1);
res.next = head;
ListNode pre = res;
ListNode cur = head;
int len = 0;
//算出链表长度
while (head != null) {
len++;
head = head.next;
}
//每k个一组,分为len/k 组
for (int j = 0; j < len / k; j++) {
//将第j组的k个元素放入栈中
for (int i = 0; i < k; i++) {
stack.push(cur);
cur = cur.next;
}
//将栈中元素取出并与前面链表拼接
while (!stack.isEmpty()) {
pre.next = stack.pop();
pre = pre.next;
}
//与后面来链表拼接
pre.next = cur;
}
return res.next;
}
}