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) { // write code here if(head == null || head.next == null){ return head; } //第一步 分割链表 ArrayList<ListNode> list = new ArrayList<>(); while(head != null){ ListNode node = head; boolean isHaveKSize = true; for(int i = 0;i< k - 1;i++){ if(node.next != null){ node = node.next; } else { //不够k个 isHaveKSize = false; break; } } if (isHaveKSize){ ListNode next = node.next; node.next = null; list.add(head); head = next; } else { break; } } //第二步 分别翻转 for(int i = 0;i<list.size();i++){ ListNode reverseNode = reverse(list.remove(i)); list.add(i,reverseNode); } //第三步 拼接 if(list.size() > 0){ ListNode first = list.get(0); ListNode tail = findTail(first); for(int i = 1;i<list.size();i++){ ListNode node = list.get(i); tail.next = node; tail = findTail(node); } //不是k的倍数 保持原样 if(head != null){ tail.next = head; } return first; } else { return head; } } public static ListNode findTail(ListNode node){ if(node == null || node.next == null){ return node; } ListNode tail = node; while(tail.next != null){ tail = tail.next; } return tail; } public static ListNode reverse(ListNode head){ if(head == null || head.next == null){ return head; } ListNode last = null; while(head != null){ ListNode next = head.next; head.next = last; last = head; head = next; } return last; } }