/*
* 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
};
看题目可以得知可能需要递归的思想实现。



京公网安备 11010502036488号