import java.util.*; import java.util.List; import java.util.ArrayList; import java.util.Stack; /* * 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) { if(head == null || head.next == null){ return head; } int size = getNodeSize(head); if(size < k){ return head; } //第一步对链表进行切分 List<Stack<ListNode>> list = new ArrayList<>(); int curLength = 0; Stack<ListNode> stack = new Stack<>(); while(size >= (k - curLength)){ if(curLength == k){ list.add(stack); stack = new Stack<>(); curLength = 0; } else { stack.push(head); head = head.next; curLength ++; size --; } } //第二步重新组装 ListNode newHead = null; ListNode tail = null; for(int i = 0;i<list.size();i++){ Stack<ListNode> next = list.get(i); while(!next.isEmpty()){ ListNode node = next.pop(); if(newHead == null){ newHead = node; tail = newHead; } else { tail.next = node; tail = tail.next; } } } tail.next = head; return newHead; } public int getNodeSize(ListNode node){ if(node == null){ return 0; } else { ListNode temp = node; int res = 0; while(temp != null){ res ++; temp = temp.next; } return res; } } }