【JS每日一算法】20.K个一组翻转链表(栈、尾插法)

您所在的位置:网站首页 美团算法题零分 【JS每日一算法】20.K个一组翻转链表(栈、尾插法)

【JS每日一算法】20.K个一组翻转链表(栈、尾插法)

2023-04-11 02:53| 来源: 网络整理| 查看: 265

给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。

k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:

reverse_ex2.jpg

输入: head = [1,2,3,4,5], k = 3 输出: [3,2,1,4,5] 复制代码

更多JS版本题解点击链接关注该仓库👀

/** * @description: 栈方法 TC:O(n) SC:O(n) * @author: JunLiangWang * @param {*} head 输入链表头部元素 * @param {*} k 翻转K个元素 * @return {*} */ function stack(head, k) { /** * 该方案利用栈先进后出的特点,每次遍历链表的k个元素入栈,然后将元素依次出栈添加到新的 * 链表中,直到遍历完成链表所有元素或剩余元素不足k个。剩余元素不足k个则直接将剩余元素 * 加入新链表中直接返回新链表 */ // 如果k小于等于1,证明无需翻转,直接返回原链表即可 if (k = 0; i--) { node.next = stackArray[i]; node = node.next; } } // 当链表元素刚好为k个元素,第一个元素变为最后一个 // 元素后其next指向的是第二个元素,将其重置为null node.next = null; return HEAD.next; } /** * @description: 尾插法 TC:O(n) SC:O(1) * @author: JunLiangWang * @param {*} head * @param {*} k * @return {*} */ function tailPlugging(head, k) { /** * 该方案利用尾插法,设翻转0到k个元素,则需要将第0个元素的next赋值为第k+1个元素, * 后续第n个元素则将其next取出保存,然后将next赋值第n-1个元素,以此类推即可实现翻转 */ // 如果k小于等于1,证明无需翻转,直接返回即可 if (k


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3