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

相关文章

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

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方法时响应总结统一返回