【JS每日一算法】20.K个一组翻转链表(栈、尾插法) |
您所在的位置:网站首页 › 美团算法题零分 › 【JS每日一算法】20.K个一组翻转链表(栈、尾插法) |
给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。 k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 示例 1: 更多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 |