一、题目
二、实现
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) {
// 1.定义一个栈
Stack<ListNode> stack = new Stack<>();
// 2. 初始化链表,存放结果
ListNode res = new ListNode(0);
// 3. 定义结果链的指针
ListNode p = res;
// 4. 通过栈,实现子链表反转
while(true){
//1. 当前子链表的开始位置(head记录当前子链的头部)
ListNode temp = head;
//2. 记录反转的结点数
int count = 0;
while(count<k && temp!=null){
stack.push(temp);
temp = temp.next;
count++;
}
//3. 如果最后的元素不足k,不进行反转,直接加到结果链,退出
if(count<k){
p.next = head;
break;
}
//4. 将栈中元素出栈,加到结果链中
while(!stack.isEmpty()){
p.next = stack.pop();
p = p.next;
}
//5. 更新下一个子链的头部
head = temp;
}
return res.next;
}
}