思路:

问题的关键是有一个 能够翻转链表 head 到 tail 之间链表的方法

让我们看一下这个reserve(head , tail ),执行效果

图片说明
##代码

  // 翻转链表 head tail 
  public void reserve(ListNode head, ListNode tail){
        ListNode iter = head.next;
        head.next = tail.next;
        ListNode boundary = head.next;
        ListNode tep;
        while (iter != boundary){
            tep = head.next;
            head.next = iter;
            iter = iter.next;
            head.next.next = tep;
        }
    }



    public ListNode reverseKGroup (ListNode head, int k) {
        // write code here
        ListNode h = new ListNode(0);
        h.next = head;
        ListNode iter = h;
        ListNode l = h;
        int count = 0;
        ListNode tep;
        while (iter != null){
            if(count == k){
                //保存下新的左边界,其实就是原左边界的下一个
                tep = l.next;
                reserve(l , iter);
                l = tep;
                iter = l;
                count = 0;
            }
            iter = iter.next;
            count++;
        }

        return h.next;
    }