import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param k int整型 * @return ListNode类 */ public ListNode reverseKGroup (ListNode head, int k) { // write code here ListNode result = new ListNode(1); result.next = head; ListNode left = result; ListNode cur = head; int len = 0; // 先得到链表长度 while(head != null) { head = head.next; len++; } for (int j = 0; j < len/k; j++) { // 对数组分组进行部分反转 for(int i = 1; i < k; ++i) { // 依然和m n之间的节点反转法,使用头插的形式 // 前指针寻找cur的下一个 ListNode temp = cur.next; // 当前指针的下一个指向自己下一个node的下一个 cur.next = temp.next; // 下以一个node则要指向当前节点 temp.next = left.next; // 当前节点指向当前节点的下一个,则节点前插 left.next = temp; } // left到当前节点 left = cur; // 因为当前节点已经到了反转数组的尾部,所以直接next cur = cur.next; } return result.next; } }