链表翻转,写法和交换类似,但是需要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

相关文章

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

mybatis的mapper对应的xml写法及配置详解

《mybatis的mapper对应的xml写法及配置详解》这篇文章给大家介绍mybatis的mapper对应的xml写法及配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录前置mapper 对应 XML 基础配置mapper 对应 xml 复杂配置Mapper 中的相

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、