【算法】链表每k个节点反转 (js)

牛客链接:https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e?tpId=196&&tqId=37080&rp=1&ru=/ta/job-code-total&qru=/ta/job-code-total/question-ranking

本人题解:

有点绕,好好理解

js 复制代码
/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
// 解法,把当前子链表的头节点(反转后为尾节点),指向下一反转后的子链表的头节点
// 比如第一次翻转后 3->2->1->null  head是1->null,我们要把1指向下一翻转后子链表的头结点
function reverseKGroup( head ,  k ) {
    // write code here
    let tail = head;
    // 找到尾部用来作为下一子链表的头部
    for(let i=0;i<k;i++){
        // 不足k个则原样返回
        if(tail===null) return head;
        tail =  tail.next;
    }
    let pre = null;
    let cur = head;
    // 反转子链表
    for(let i=0;i<k;i++){
        const temp = cur.next;
        cur.next = pre;
        pre = cur;
        cur = temp;
    }
    // 利用递归不断反转链接链表,将反转后子链表的尾节点链接到下一翻转链表的头结点
    // 此处递归过程会开辟一个新的空间和变量
    head.next = reverseKGroup(tail,k);
    // 返回第一次反转子链表的头结点(整个链表的头结点)
    return pre;

}
module.exports = {
    reverseKGroup : reverseKGroup
};
相关推荐
DFT计算杂谈19 分钟前
KPROJ编译教程
java·前端·python·算法·conda
重生之我是Java开发战士31 分钟前
【笔试强训】Week5:空调遥控, kotor和气球,走迷宫,主持人调度II,体操队形,二叉树的最大路径和,排序子序列,消减整数
java·算法·动态规划
吃好睡好便好2 小时前
用if…end…语句计算分段函数
开发语言·人工智能·学习·算法·matlab
熊猫_豆豆2 小时前
一个模拟四轴飞行器在随机气流扰动下悬停飞行的交互式3D仿真网页,包含飞行器建模与PID控制算法
javascript·3d·html·四轴无人机模拟飞行
灰灰勇闯IT2 小时前
ops-memory:CANN Runtime 的 Tensor 内存管理
算法
叶子Talk2 小时前
OpenAI破解80年数学猜想,AI首次做出原创证明
人工智能·数学·算法·机器学习·ai·openai·ai推理
MhZhou04122 小时前
1.11M参数小模型实现脑瘤分割 CVPR 2026 Findings 开源
算法·计算机视觉·3d·空间计算
有为少年3 小时前
Welford算法 | 从单一到批次
大数据·人工智能·深度学习·神经网络·算法·机器学习
吴可可1233 小时前
Teigha处理CAD样条曲线的方法解析
数据库·算法·c#
啊董dong3 小时前
noi-2026年5月12号小测验
数据结构·c++·算法