链表每k个反转 java_K 个一组翻转链表

leetcode第25题(困难)问题描述

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

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例:

给你这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5解题思路

整体思路是将原链表分成p(p=n个节点 / k)段(逻辑上的分),每段都有一个头节点和一个尾节点。

第一步先遍历一次整个原链表,当每一组节点满足有k个节点时,标记当前组的头节点和尾节点。

第二步翻转链表,改变每组的头节点和尾节点的引用。返回第一组的头节点即可。

这样的时间复杂度就是 O(n)+O(n/k)ecfbadc28a6784cc0b037239abcc02db.png示例代码(java)/**

* Definition for singly-linked list.

* public class ListNode {

* int val;

* ListNode next;

* ListNode() {}

* ListNode(int val) { this.val = val; }

* ListNode(int val, ListNode next) { this.val = val; this.next = next; }

* }

*/

class Solution {

public ListNode reverseKGroup(ListNode head, int k) {

return begin(head,k);

}

public static ListNode th;

/**

* 拼接反转的链表

* @param listNode

* @param k

* @return

*/

public static ListNode begin(ListNode listNode,int k){

if(k==1){

return listNode;

}

th=listNode;

LinkedList ov=new LinkedList();

while(th!=null){

ListNode head=th;

ListNode tail=reversal(th,k);

ov.addLast(new HeadTail(tail,head));

}

if(ov.size()==0){

return null;

}else{

HeadTail headTail=ov.removeFirst();

ListNode head=headTail.head;

ListNode tail=headTail.tail;

while(ov.size()>0){

headTail=ov.removeFirst();

tail.next=headTail.head;

tail=headTail.tail;

}

return head;

}

}

/**

* 反转链表

* @param node

* @param k

* @return

*/

public static ListNode reversal(ListNode node,int k){

ListNode p=null;

ListNode n;

int i=0;

while(node.next!=null){

n=node.next;

node.next=p;

p=node;

node=n;

i++;

if(i==k-1){

break;

}

}

th=node.next;

node.next=p;

if(i

node=reversal2(node,k);

}

return node;

}

/**

* 反转链表

* @param node

* @param k

* @return

*/

public static ListNode reversal2(ListNode node,int k){

ListNode p=null;

ListNode n;

while(node.next!=null){

n=node.next;

node.next=p;

p=node;

node=n;

}

node.next=p;

return node;

}

public static class HeadTail {

ListNode head;

ListNode tail;

public HeadTail(ListNode head,ListNode tail){

this.head=head;

this.tail=tail;

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java里面的scanner怎么关闭_作业。scanner怎么不能关闭

package try_catch; import java.util.Scanner; public class TryCatchPractice2 {//在类开始声明,则其他方法都能调用 Scanner in=new Scanner(System.in); NoBookException NoB=new NoBookException(); String[] books={"语文","数学","英语"…

java ddd 领域事件_Cribbb基于DDD/Domain Event领域事件的开源PHP通知系统

Cribbb是一个使用DDD聚合根和领域事件Domain Events概念开发的PHP开源通知框架:cribbb/cribbb GitHub几乎所有Web应用都有一个通知提醒系统,这些通知系统都有共有的属性和功能:一个发往用户的消息管道Cribbb通知系统扮演一种消息管道&#x…

java 自带导出excel_4.java项目页面导出excel功能

用的是SSM框架,字段根据自己的业务需求改1.前台页面导出/*导出按钮提交*/function downloadExcel(){$("#dynamicDownload").submit();}2.后台相关代码import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org…

php 运行外部程序_PHP在linux上执行外部命令的方法

目录:一、PHP中调用外部命令介绍二、关于安全问题三、关于超时问题四、关于PHP运行linux环境中命令出现的问题一、PHP中调用外部命令介绍在PHP中调用外部命令,可以用,1>调用专门函数、2>反引号、3>popen()函数打开进程,三…

php直播pk规则,直播源码中的主播PK功能是如何实现的

直播行业为赢得更广泛用户的青睐,自然要不断开发更有趣的玩法、模式,在直播源码中加入主播PK功能就是一种提高直播互动性、激发用户好胜心的方法,一方面这种方法可以吸引更多用户观看,增加主播的曝光率,另一方面它又能…

php中手机端ajax上拉加载更多,jQuery手机网页上拉加载更多

手机网页和PC网页都可以使用的上拉加载更多内容,其中LoadingDataFn自己改为ajax加载就可以了var page 1, //分页码off_on false, //分页开关(滚动加载方法 1 中用的)timers null; //定时器(滚动加载方法 2 中用的)//加载数据var LoadingDataFn function() {var …

phpcms上传php,phpcms如何上传视频

phpcms如何上传视频?phpcms-v9上传视频文件时的解决方案1.不建议直接在后台上传视频文件,因为视频文件一般都比较大,直接上传影响带宽;可先通过ftp工具将视频文件上传到指定目录,然后再后台引入视频文件的地址即可2.如…

护卫神怎么重启php,护卫神·主机大师如何开启php_opcache_护卫神

护卫神主机大师支持5.5至7.3这几个版本开启php_opcache扩展。一,先打开护卫神主机大师面板-常用操作-打开软件目录二,打开phpweb目录,找到要开启opcache的php版本,比如我这里要在php5.5中开启,进入php55目录&#xff0…

php 首页加背景图片,如何在页首添加一张背景图片

Navy主题如何在页首添加一张图片可以http://www.ikk.me/这样子顶部添加背景图片他的代码是【点击查看】回复内容:Navy主题如何在页首添加一张图片可以http://www.ikk.me/这样子顶部添加背景图片他的代码是【点击查看】看了下代码,就是给 section 加了个 …

php装箱,php兑现装箱算法

php实现装箱算法贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况&…

flash as3与后台php交互用户注册例子,as3与PHP后台交互2

怎么样,是不是也很方便的实现了as3和后台的数据传输?恩,现在我们的程序可以双向交互数据了,但这只是一些简单的数据,如果你要传输带有结构的数据,(熟悉as2的人都知道loadVars可以自动解析下载数据的结构)&a…

java 去除 quot,JAVA去除web页面传入后台的特殊字符工具类 | 学步园

package www.tmzskj.com.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;/*** 功能 过滤特殊字符,清除掉所有特殊字符* regEx 为要清除的字符* author admin**/public class StringFilterTest {public static String …

matlab傅里叶工具箱,matlab通信工具箱.pdf

matlab通信工具箱randerr 产生随机误码图样randint 产生均匀分布的随机整数信号源 randsrc 用预定义的字母表产生随机矩阵wgn 产生高斯噪声commsrc.pattern 结构模式生成句柄berawgn 非编码的AWGN 信道的误比特率bercoding 编码的AWGN 信道的误比特率berconfint 蒙特卡罗仿真下…

java迭代器cas,java提高篇(三十)-Iterator - Java 技术驿站-Java 技术驿站

迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。Iterator iterator list.iterator();while(iterator.hasNext()){String string iterator.next();//do something}迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类…

mysqldb mysql config,安装mysqldb python界面时找不到mysql_config

mySQLdb是一个用于mysql的python界面,但它不是mysql本身。 显然mySQLdb需要命令“mysql_config”,所以你需要先安装。你能否确认你是否通过从shell运行“mysql”来安装mysql本身? 这应该给你一个“mysql:command not found”以外的…

kfcm算法matlab实现,KFCM算法分析

function [center, U, obj_fcn] KFCMClust(data, cluster_n, kernel_b,options)% FCMClust.m 采用模糊C均值对数据集data聚为cluster_n类%% 用法:% 1. [center,U,obj_fcn] KFCMClust(Data,N_cluster,kernel_b,options);% 2. [center,U,obj_fcn] KFCMClus…

matlab中的terminator模块,2.2 Ground 及 Terminator模块

课时:117节课时长:20.1小时课级:中级提高simulink是matlab中的一种可视化仿真工具, 是一种基于matlab的框图设计环境,是实现动态系统建模、仿真和分析的一个软件包,被广泛应用于线性系统、非线性系统、数字…

matlab 柯西黎曼方程,【判断题】柯西-黎曼方程成立是函数解析的必要条件.

参考答案如下判断【判断题】核糖体的沉降系数等于大小亚基沉降系数的总和。题柯【其它】We ______________________________________ (投入到各项校园课外活动中) on campus.西黎【单选题】起动机与蓄电池的连接线蓄电池与车架的搭铁线则采用( )。 (2.0分)曼方【简答题】作业选…

取整函数php,php取整函数三个例子

本节内容:php取整函数用法1,php取整函数 ceil -- 取最大整数float ceil ( float value )返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。…

python执行过程打印,如何在pytest运行过程中看到正常的打印输出?

乔在接受的答案中提出了一个评论 ,他问道:有没有办法打印到控制台并捕获输出,以便它显示在junit报告中?在UNIX中,这通常被称为开球 。 理想情况下,开球而不是捕捉将是py.test默认。 非理想情况下&#xff0…