import java.util.*; public class Solution { public ListNode reverseKGroup (ListNode head, int k) { //采用递归方法,利用tail进行记录下一次反转的开始, ListNode tail = head;//第一次反转的尾部 //for循环得到前k组 for(int i=0;i<k;i++){ if(tail==null){//不足反转 return head; } tail = tail.next; } ListNode pre = null;//作为新的前驱节点, //不能直接使用head进行反转,因为head还要用来连接下一k组 //进行反转 ListNode cur = head; ListNode tmp = cur; while(cur!=tail){ tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; } head.next = reverseKGroup(tail,k); return pre; } }