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) { if(k == 1 || head == null || head.next == null){ return head; } // write code here ListNode newList = new ListNode(0); //head开始时指向一组内容的第一个 newList.next = head; ListNode pre = newList; ListNode groupEnd = toNextEnd(head, k); while(head != null && groupEnd != head){ //方案①先移动pre,再移动head // ListNode tmp = pre.next; // pre.next = head.next; // head.next = head.next.next; // pre.next.next = tmp; //方案②先移动head,再移动pre ListNode tmp = head.next; head.next = tmp.next; tmp.next = pre.next; pre.next = tmp; if(head.next == groupEnd){ pre = head; head = groupEnd; groupEnd = toNextEnd(groupEnd, k); } } return newList.next; } //返回1、原链,不够一组;2、null或者下一组的第一个节点,说明够一组 public ListNode toNextEnd(ListNode head, int k){ ListNode tmp = head; for(int i = 0; i< k; i++){ if(head == null){ return tmp; } head = head.next; } return head; } }