题目描述

将给出的链表中的节点每\ k k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是\ k k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
要求空间复杂度 \ O(1) O(1)
 
例如:
给定的链表是  1→2→3→4→5
对于 k = 2 , 你应该返回   2→1→4→3→5
对于 k = 3, 你应该返回 3→2→1→4→5
 
代码:
/*
* function ListNode(x){
* this.val = x;
* this.next = null;
* }
*/ /**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
//js翻转链表算法
function myReverse(head, tail){
let pre = null;
let cur = head;
// const nex = cur.next;
let nex = null;
while(pre != tail){
nex = cur.next;
cur.next = pre;
pre = cur;
cur = nex;
}
return [tail, head];
} function reverseKGroup( head , k ) {
const hair = new ListNode(0);
hair.next = head;
let pre = hair; while(head){
let tail = pre; //查看剩余部分长度的hi否大于等于K
for(let i =0; i < k; i++){
tail = tail.next;
if(!tail){
return hair.next;
}
} const cur = tail.next;
[head, tail] = myReverse(head, tail);
pre.next = head;
tail.next = cur;
pre = tail;
head = tail.next;
}
return hair.next;
// write code here
}
module.exports = {
reverseKGroup : reverseKGroup
};

 C语言版本的代码:

/*
* function ListNode(x){
* this.val = x;
* this.next = null;
* }
*/ /**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
function reverseKGroup( head , k ) {
// write code here
var dummy = new ListNode(-1);
dummy.next = head;
var pre=dummy,start=head,end=head,low=head;
while(!low){
for(let i=1;i<k && end!==null;i++ ){
end = end.next
}
if(end === null){
break;
}
//low指针已经走了k步
low = end.next;
end.next = null;
end = start;
start = reverse(start); //翻转链表之后调整首尾
end.next = low;
pre.next = start;
//重新指定pre start end
pre = end;
start = low;
end = start;
}
return dummy.next;
}
//翻转链表
function reverse(head){
var pre = null,low = null
var cur = head;
while(!cur){
low = cur.next;
cur.next = pre;
pre = cur;
cur = low;
}
//返回翻转后的链表头结点
return pre;
} module.exports = {
reverseKGroup : reverseKGroup
};

  

js 之k个一组翻转链表的更多相关文章

  1. [LintCode] Reverse Nodes in k-Group 每k个一组翻转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  2. leetcode 25. K 个一组翻转链表

    # coding:utf-8 __author__ = "sn" """ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返 ...

  3. LeetCode 25. K 个一组翻转链表 | Python

    25. K 个一组翻转链表 题目来源:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 题目 给你一个链表,每 k 个节点一组进行翻转 ...

  4. Java实现 LeetCode 25 K个一组翻转链表

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...

  5. LeetCoded第25题题解--K个一组翻转链表--java--链表

    链表 单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素的引用字段链接在一起. 双链表:与单链表不同的是,双链表的每个节点都含有两个引用字段. 链表优点 灵活分配内存空间 能在O ...

  6. leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表

    24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

  7. k个一组翻转链表(java实现)

    题目: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定这 ...

  8. [LeetCode]25. Reverse Nodes in k-Group k个一组翻转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k ...

  9. [LeetCode] Reverse Nodes in k-Group 每k个一组翻转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

随机推荐

  1. J-Link cmd的使用

    ​01.WHY 为什么要使用到J-LinkCommander呢???大部分情况下,我们使用J-link都是在IDE中debug使用的,出现问题,直接debug复现然后解决.这是最常见的开发方式. 但是 ...

  2. 设计模式:单例模式的使用和实现(JAVA)

    单例模式的使用 jdk和Spring都有实现单例模式,这里举的例子是JDK中Runtime这个类 Runtime的使用 通过Runtime类可以获取JVM堆内存的信息,还可以调用它的方法进行GC. p ...

  3. 解决微信官方SDK给出1.4.0等版本没有预览文件(previewFile)等接口

    使用苹果手机测试 调用微信的js-sdk在系统中实现上传.预览附件的功能.在自己的手机测试通过后,直接丢给QA测试了 本以为相安无事了,没想到QA用安卓手机测的时候居然不得,使用的是下载下来的jwei ...

  4. SSM自学笔记(四)

    8.面向切面编程AOP 1.Spring 的 AOP 简介 1.1 什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运 ...

  5. com.github.ulisesbocchio:jasypt-spring-boot-starter:2.0.0引用了sping cloud Finchley.M8版本,一直报错说不能从阿里云下载

    解决方法: 1.找到idea或者eclipase中maven插件引向得settings.xml文件 2.修改文件中<mirror/>标签(配置仓库镜像用得)中<mirrorOf/&g ...

  6. shell检查文件内容是否变化

    # 先记录文件的md5 md5sum ip.list >ip.md5 # 记录新的md5与之前的比较 #!/bin/bash md5sum ip.list > .ip.md5 diff i ...

  7. 关于 go-fastdfs-web 的SpringBoot 后台管理

    1.问题的产生: 1.公司需要存储图片数据,采用Go语言的fastdfs,实现存储,我的职责就是部署,SpringBoot版本的管理平台. 2.当我看见代码之后我的内心是拒绝的,没有注释....... ...

  8. 互斥锁(Lock)

    转载至:https://www.cnblogs.com/dolphin0520/p/3923167.html 一.synchronized的缺陷 synchronized是java中的一个关键字,也就 ...

  9. GPIO引脚速度的应用匹配

    GPIO 引脚速度: GPIO 引脚速度又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同 ...

  10. 在ubuntu18.04上部署项目时遇到的问题总结

    因为在实验室中,有几台空闲的机子,我便选了一台准备做一个本地的服务器,因为买的阿里云学生机和之前用于FQ的机子感觉都不太顺手,阿里的学生机配置稍低,FQ用的服务器延迟太高.开始在centos和ubun ...