【LeetCode热题100(31/100)】K 个一组翻转链表

题目地址: 链接
思路:

从头节点开始,判读之后的节点长度是否超过k

  • 若超过,则反转之后的 k 节点,使用头插法进行翻转
  • 没有超过,结束循环。

最后返回头节点即可。

js 复制代码
/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} k
 * @return {ListNode}
 */
var reverseKGroup = function(head, k) {
    const dummy = new ListNode(0, head);
    let [p, q] = [dummy, dummy];
    while(p) {
        let l = k;
        while(l -- && p) {
            p = p.next;
        }
        if(p) p = kRev(q, k);
        q = p;
    }
    return dummy.next;
};


/**
 * 反转从 dummy 后 k 个节点
 */
var kRev = function(dummy, k) {
    let head = dummy.next;

    dummy.next = null;
    let p = head;
    for(let i = 0; i < k; i ++) {
        let q = p;
        p = p.next;
        q.next = dummy.next;
        dummy.next = q;
    }
    let np = dummy;
    while(np.next) np = np.next;
    np.next = p; 
    return np;
}
相关推荐
LYFlied2 分钟前
【每日算法】LeetCode 22. 括号生成
数据结构·算法·leetcode·面试·职场和发展
桓琰3 分钟前
非线性滤波——基于EKF的INS/GPS松组合算法的研究(直接法|EKF|欧拉角)
算法·matlab·卡尔曼滤波算法
想自律的露西西★4 分钟前
js.39. 组合总和
前端·javascript·数据结构·算法
johnny2334 分钟前
Raft算法理解
算法
zore_c8 分钟前
【数据结构】栈——超详解!!!(包含栈的实现)
c语言·开发语言·数据结构·经验分享·笔记·算法·链表
Chen--Xing8 分钟前
LeetCode 15.三数之和
c++·python·算法·leetcode·rust
月明长歌11 分钟前
【码道初阶】【Leetcode105&106】用遍历序列还原二叉树:前序+中序、后序+中序的统一套路与“先建哪边”的坑
java·开发语言·数据结构·算法·leetcode·二叉树
iAkuya15 分钟前
(leetcode)力扣100 16除自身以外数组的乘积(预处理前项后项积)
数据结构·算法·leetcode
2301_7644413321 分钟前
Python实现深海声弹射路径仿真
python·算法·数学建模
高洁0129 分钟前
DNN案例一步步构建深层神经网络
人工智能·神经网络·算法·机器学习·transformer