/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
function reverseKGroup( head ,  k ) {
    // write code here
    let curr=head;
    let prev=null;
    let node=head;
  //如果不足k个元素,直接返回头节点,node是作为查询指针的
    for(let i=0;i<k;i++){
        if(node===null){
            return head;
        }
        node=node.next;
    }
  //使用三指针法翻转k个元素
    for(let i=0;i<k;i++){
        let t=curr.next;
        curr.next=prev;
        prev=curr;
        curr=t;
    }
  //此时的head头指针已经变成了尾指针,所以next就是下一组的头了。
    head.next=reverseKGroup(curr,k);//curr就是prev.next,也就是下一组的头指针
  //每次翻转之后prev都是头指针
    return prev;
}
module.exports = {
    reverseKGroup : reverseKGroup
};

看题目可以得知可能需要递归的思想实现。