链表翻转,写法和交换类似,但是需要pre cur 还有一个临时变量nxt记录下一个结点

本文主要是介绍链表翻转,写法和交换类似,但是需要pre cur 还有一个临时变量nxt记录下一个结点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

递归反转单链表(头插法反转部分链表

要弄pre cur 还有nxt(临时变量保存下一个结点

P0指到需要修改的链表的前一个结点

class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {ListNode dummy=new ListNode(-1,head);ListNode p0=dummy;//指向需要倒转链表的前一个for(int i=0;i<left-1;i++){p0=p0.next;}ListNode pre=null,cur=p0.next;for(int i=0;i<right-left+1;i++){ListNode nxt=cur.next;cur.next=pre;pre=cur;cur=nxt;}p0.next.next=cur;p0.next=pre;return dummy.next;}
}

K个一组的链表翻转,

在之前的基础上有所变化,先计算链表的长度。

如果长度不够则不翻转

class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dummy=new ListNode(-1,head);ListNode p0=dummy;ListNode lenp=head;//用于计算链表长度ListNode cur=head,pre=null;int len=0;while(lenp!=null){len++;lenp=lenp.next;}while(len>=k){len-=k;for(int i=0;i<k;i++){ListNode nxt=cur.next;cur.next=pre;pre=cur;cur=nxt;}ListNode temp=p0.next;p0.next.next=cur;p0.next=pre;p0=temp;}return dummy.next;}}

如何判断回文链表

寻找回文串的核心思想是从中心向两端扩展

判断一个字符串是不是回文串就简单很多,不需要考虑奇偶情况,只需要双指针技巧,从两端向中间逼近即可:

1用递归

用快慢指针先找到链表的中间值,再反转中间值后面的链表进行比较。

class Solution {ListNode left;public boolean isPalindrome(ListNode head) {left=head;return travers(head);}boolean travers(ListNode right){if(right==null) return true;boolean res=travers(right.next);res=res&&(right.val==left.val);left=left.next;return res;}
}
class Solution {public boolean isPalindrome(ListNode head) {ListNode slow=head,fast=head;while(fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;}if(fast!=null) slow=slow.next;//奇数链表,slow往前走一步slow=reverse(slow);//翻转后要更新ListNode p1=head,p2=slow;while(p2!=null&&p1.val==p2.val){p1=p1.next;p2=p2.next;}return p2==null;}ListNode reverse(ListNode slow){ListNode pre=null,cur=slow;while(cur!=null){ListNode temp=cur.next;cur.next=pre;pre=cur;cur=temp;}return pre;//返回到翻转后的头结点}
}

这篇关于链表翻转,写法和交换类似,但是需要pre cur 还有一个临时变量nxt记录下一个结点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045619

相关文章

Python之变量命名规则详解

《Python之变量命名规则详解》Python变量命名需遵守语法规范(字母开头、不使用关键字),遵循三要(自解释、明确功能)和三不要(避免缩写、语法错误、滥用下划线)原则,确保代码易读易维护... 目录1. 硬性规则2. “三要” 原则2.1. 要体现变量的 “实际作用”,拒绝 “无意义命名”2.2. 要让

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于