回文链表和链表reverse()

2023-11-18

链接
判断一个链表是否是回文字符串?

  • 快慢指针
  • 链表reverse
  • 考虑是偶数链表还是

reverse

以后都构造不包含头节点都结果链表

其实跟我以前都思路是一样的想法,同样是采用头插入法和分开两个链表的做法情况

public void reverse(ListNode head){
     ListNode pre =null;
     while(head!=null){
     ListNode next =head.next;
     head.next =pre;
     pre =head;
     head =next;
}
return pre;
}

如何判断是偶数链表还是单链表的情况下
主要有下面的判断准则

判断是否为空,如果最后fast为空,则为偶数链表,
如果fast不为空,则为奇数链表,这种情况

按照上述做法,找到最后一个

最终的代码结构如下

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    
    public boolean isPalindrome(ListNode head) {
         if(head==null|| head.next==null) {return true;}
         ListNode slow = head,fast=head;
        
         slow = middle(head);
         slow = reverse(slow);
      
        
        while(fast!=null && slow!=null){
             if(fast.val!=slow.val){
                 return false;
             }
             fast = fast.next;
             slow = slow.next;
         }
         return true;
    }
        
     private ListNode middle(ListNode head){
         ListNode slow = head;
         ListNode fast = head;

         while(fast!=null&& fast.next!=null){
             fast =fast.next.next;
             slow = slow.next;
         }

         if(count(head)%2==1) {slow = slow.next;}

         return slow;
    }
        private ListNode reverse(ListNode head){
       //不构造一个头节点,直接返回即可

        ListNode pre =null;

        while(head!=null){
            ListNode next= head.next;
            head.next = pre;
            pre = head;
            head  = next;
        }
        return pre;
    }
    
     private int count(ListNode head){
        int count =0;
        while(head!=null)
        {
            ++count;
            head = head.next;
        }
        return count;
    }

    
   

    
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

回文链表和链表reverse() 的相关文章

  • 这段代码中间接如何工作?

    我正在阅读答案合并两个已排序的链表 https stackoverflow com questions 2348374 merging two sorted linked lists rq 1 代码 define SWAP PTRS a b
  • 迭代地反转单链表

    必须是 O n 且就地 空间复杂度为 1 下面的代码确实有效 但是有没有更简单或更好的方法 public void invert if this getHead null return if this getHead getNext nul
  • 在链表中添加列表项或节点

    我尝试使用以下 C 代码在从键盘插入值时对链接列表项进行排序 在这里 我想使用 while 循环在一个插入函数的开头 中间和结尾处插入值 我的重点只是如何通过使用逻辑运算找到确切的位置来插入和删除 你能帮我编码一个链表 可以在 C 中插入项
  • 为什么使用邻接矩阵或邻接表?

    我刚刚开始学习图表 让我困惑的是为什么我们需要使用外部数据结构 如矩阵或列表 存储图的哪些顶点连接到其他顶点 为什么每个顶点不能像决策树中的节点那样只保存对其连接的顶点的引用 对我来说 这似乎更直观 Thanks 嗯 这来自于一种设计理念
  • 如何使用冒泡排序对链表进行排序?

    我正在尝试使用冒泡排序来对链接列表进行排序 我使用 curr 和 Trail 来遍历列表 curr 应该总是比 Trail 领先一步 到目前为止 这是我的代码 void linked list sort int i j 0 int coun
  • 在Java中为单链表创建新节点

    我仍在学习 Java 目前正在解决 破解编码面试 中的问题 第 2 章 LinkedList 中的问题之一要求从未排序的链表中删除重复项 我在 GitHub 上找到了一堆答案 解决方案 但我想创建自己的 Node 并编写自己的版本 到目前为
  • 为什么 Scala 集合中没有不可变的双链表?

    看着this https stackoverflow com q 8039261 770361问题 提问者对某个元素的第一个和最后一个实例感兴趣List 似乎更有效的解决方案是使用DoubleLinkedList可以从列表末尾向后搜索 然而
  • NullPointerException 使用链表时出错

    我刚刚完成了这个程序的工作并编译了它 但它在用户输入后中断并给了我这个 请在键盘上输入0个或多个值 12 4 3 2 1 Exception in thread main java lang NullPointerException at
  • 在恒定空间和线性时间内向后打印单链表

    我听到一个面试问题 向后打印单链表 在恒定空间和线性时间中 我的解决方案是反转链接列表 然后像这样打印它 还有其他非破坏性的解决方案吗 您已经找到了大部分答案 将链表反转到位 然后将列表遍历回开头以打印它 为了防止它 永久 破坏性 请就地反
  • 为什么LinkedList和ArrayList扩展了Java中的AbstractList?

    Why LinkedList and ArrayList延伸AbstractList in Java 当我们想要在实现类中指定公共行为时 可以使用抽象类 但是里面的所有方法AbstractList被覆盖ArrayList and Linke
  • 使用队列进行基数排序

    我想创建一个基数排序 http en wikipedia org wiki Radix sort使用队列实现 我无法弄清楚我的代码的哪一部分有问题或者我应该阅读哪些资源 我的代码可能完全错误 但这是我的实现 没有任何帮助 我还没有参加数据结
  • Javascript 中的链表与数组

    所以我在 JS 中玩弄链表并提出以下问题 假设我们有一个数组和一个链表 都有 5000 个元素 我们想在索引 10 处插入新元素 数组方式非常简单 我们在给定索引处插入新元素 并将其余元素向前移动一个索引 所以我尝试用链表来做到这一点 并以
  • 在 std::list 上使用擦除时的 C++ 分段

    我正在尝试使用以下命令从 C 链接列表中删除项目erase和一个列表迭代器 include
  • 如何在 d3 力定向图中突出显示(更改颜色)所有连接(邻居)节点和链接

    我在这里看到了这个例子http www d3noob org 2013 03 d3js force directed graph example basic html http www d3noob org 2013 03 d3js for
  • 完美平衡二叉搜索树

    我有一个理论问题Balanced BST 我想建立Perfect Balanced Tree具有2 k 1节点 从常规unbalanced BST 我能想到的最简单的解决方案是使用排序Array Linked list并递归地将数组划分为子
  • Scala 2.11 LinkedList 已弃用,我应该使用什么?

    根据the docs http www scala lang org api current index html scala collection mutable LinkedList scala collection mutable L
  • 在 n log n 时间内打乱链表的算法

    我正在尝试使用分治算法对链表进行洗牌 该算法以线性 n log n 时间和对数 log n 额外空间随机洗牌链表 我知道我可以进行类似于在简单的值数组中使用的 Knuth 洗牌 但我不确定如何通过分而治之来做到这一点 我的意思是 我实际上在
  • C中的链表按升序排序

    我正在为我的 C 编程课程编写一个程序 该程序应该为我们提供使用链表的经验 作业的最后部分之一要求我们获取一个链接列表 并使用我们之前在程序中编写的前置或附加函数按升序对其进行排序 struct lnode int datum struct
  • 指向C中单链表指针的指针[重复]

    这个问题在这里已经有答案了 我有一个关于 C 中的单链表的问题 我用下面所示的代码创建了一个链表 include
  • 在python中删除链表中的节点

    删除链表中的节点 这个实现有什么问题 def delete self val tmp self head prev None while tmp if val tmp data self size 1 if prev None self h

随机推荐

  • Deep Ensemble Bootstrapped Q-Learning (Deep-EBQL)【代码复现】

    Deep EBQL理论基础 原文链接 Ensemble Bootstrapping for Q Learning Deep EBQL是EBQL的深度学习版本 也即是在DQN的基础上 引入集成的思想 解决DQN过估计的问题 深度版本的EBQL
  • 02-----libevent下载或者移植环境时报错(/usr/bin/ld: warning:xxx,needed by xxx,not found)

    这个问题 bin sh xx 命令 not found是非常常见的 更具体可以是下图的情况 两者是一样的 1 我第一次遇到这种情况时 发现是库版本不对 所以将这些动态库换一篇后解决 ln s usr local lib libevent c
  • VSCode编码特效

    下载插件 Power Mode 然后来到settings json文件进行修改配置 如果找不到 可以只搜索settings 代码中继续追加这部分代码 explorer confirmDelete false powermode enable
  • Es修改索引别名

    在使用ES时有时候我们需要修改索引信息 本文总结了如何修改索引信息 ES修改索引结构 在 ElasticSearch 中索引就类似于关系型数据库中 Table 的概念 如果要修改索引的一些关键信息时 要重建索引 具体步骤如下 新建索引 复制
  • 【HTML】用户名、身份证号、邮箱、验证

    为了使页面不是那么突兀 特地导入了这俩个bootstrap框架相关的包
  • 归纳总结MATLAB中与矩阵运算有关的算术运算符(加、减、乘、除、点乘、点除、乘方、转置等)

    运算是算法的基础 所以我们有必要了解我们使用的工具怎样实现矩阵的基本运算 这篇博文总结MATLAB中矩阵的算术运算符 目录 01 加法运算符 02 减法 相反数 运算符 03 元素乘积 点乘 运算符 04 元素右除 点除 运算符 05 元素
  • C盘爆满如何解决

    上外网找到几个法子 第3个方法和你购买了驱动精灵的C盘瘦身专家的清理系统休眠文件功能是一样的 法1 一种方法是使用Windows系统自带的磁盘清理工具 它可以帮助你删除一些不需要的文件 如临时文件 回收站中的内容 系统还原点等 释放磁盘空间
  • Cesium开发个射击游戏

    经常刷视频看到这类设计游戏 思索cesium能不能开发个这样的游戏 场景就基于遥感影像或者倾斜模型 于是历时3天 水平有限 开发出简易的设计游戏demo 效果视频在b站 源码连接就丢在视频评论区了 用cesium从零开始开发个射击游戏 哔哩
  • qt 目录操作(QDir 类)展示系统文件案例

    1 目录操作 QDir 类 QDir类提供对目录结构及其内容的访问 QDir用于操作路径名 访问有关路径和文件的信息以及底层文件系统 它还可以用于访问Qt的资源系统 Qt使用 作为通用目录分隔符 与 在URL中作用路径分隔符的方式相同 如果
  • C++开发象棋一 绘制棋盘

    这是我要和大家分享的基于C 和MFC开发的一个象棋程序 目的是练习编程实践和大家分享同时希望大家能给出指教 进入主题 一 棋盘分析 这是我绘制的棋盘 棋盘的组成由9条竖线和10条横线构成 这儿我们设置每条线间的间隔是50 二 绘制过程 1
  • wdatepicker默认时间为当前时间

    document ready function alert today document getElementById serviceTime value today function today var today new Date va
  • mybatis中的if-else的嵌套使用

    mybatis的if else的嵌套使用方法 案例一 if else 在mybatis的使用过程中 难免会存在使用if else的逻辑 但是实际是没有这种语法的 提供了choose标签来替代这种语法
  • C++回顾——引用和拷贝构造函数

    一 C 中的指针 C和C 指针的最重要的区别在于C 是一种类型要求更强的语言 C不允许随便地把一个类型的指针赋值给另一个类型 但允许通过void 来实现 C 不允许这样做 如果真想把某种类型当做别的类型处理 则必须显示地使用类型转换 二 C
  • lunix断点调试与查看对象

    断点调试命令 如何查看对象内部的属性与方法
  • [高光谱] 开源项目Hyperspectral-Classification Pytorch解析之main

    开源项目Hyperspectral Classification Pytorch解析之main py 编码方式 coding utf 8 项目简介 DEEP LEARNING FOR HYPERSPECTRAL DATA This scri
  • 解决在cmd情况下无法连接MySQL情况(无脑操作教程)

    在输入外部命令 mysql u root p的时候 出现下面的情况 网图 侵删 问题分析 可能是MySQL路径问题没有解决 解决方法 1 打开电脑高级设置 2 点击环境变量 3 找到path路径变量后 点击编辑 4 新建路径 此路径是我保存
  • Java实现图片裁剪预览功能

    在项目中 我们需要做些类似头像上传 图片裁剪的功能 ok看下面文章 需要插件 jQuery Jcrop 后端代码 package org csg upload import java awt Rectangle import java aw
  • std::promise介绍及使用

    一 std promise介绍 std promise是C 11并发编程中常用的一个类 常配合std future使用 其作用是在一个线程t1中保存一个类型typename T的值 可供相绑定的std future对象在另一线程t2中获取
  • 使用OpenCV获取图像中某一点的像素值和修改某一点的像素值

    使用OpenCV获取图像中某一点的像素值和修改某一点的像素值 int my getpixel IplImage img cvLoadImage D Case Train1 bmp 1 CvScalar s for int i 0 i
  • 回文链表和链表reverse()

    链接 判断一个链表是否是回文字符串 快慢指针 链表reverse 考虑是偶数链表还是 reverse 以后都构造不包含头节点都结果链表 其实跟我以前都思路是一样的想法 同样是采用头插入法和分开两个链表的做法情况 public void re