【算法萌新闯力扣】:回文链表

    力扣题目:回文链表

开篇

  今天是备战蓝桥杯的第23天。我加入的编程导航算法通关村也在今天开营啦!那从现在起,我的算法题更新会按照算法村的给的路线更新,更加系统。大家也可以关注我新开的专栏“算法通关村”。里面会有更全面的知识点和题目的分享。

题目链接: 234.回文链表

题目描述

在这里插入图片描述

代码思路1

1.一开始写的时候,感觉在链表里操作太麻烦了,就利用list集合把链表里的元素存起来,然后在链表里判断就行(也可以放数组里)
2.既然存在集合里,那回文数的判断就轻轻松松喽。这里我使用左右指针,一个在头,一个在尾,两个指针同时往中间移动,只要有一次两个指针对应的数据不相等,则不是回文

代码纯享版

/**
 * 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 boolean isPalindrome(ListNode head) {
        List<Integer> list = new ArrayList<>();
        ListNode node = head;
        while(node != null){
            list.add(node.val);
            node = node.next;
        }
        int left = 0, right = list.size() - 1;
        while(left < right){
            if(list.get(left) != list.get(right)) return false;
            left++;
            right--;
        }
        return true;
    }
}

代码逐行解析版

class Solution {
    public boolean isPalindrome(ListNode head) {
        List<Integer> list = new ArrayList<>(); //创建list集合
        ListNode node = head; //创建结点node指向头结点
        while(node != null){ //当node不为空时
            list.add(node.val); //将该结点添加到集合中
            node = node.next; //node指向下一个结点
        }
        int left = 0, right = list.size() - 1; //创建左右指针,分别指向集合到开头和结尾
        while(left < right){ //循环条件是两个指针相遇前
            if(list.get(left) != list.get(right)) return false; //两个指针对应的数如果不相等,则不是回文,返回false
            left++; //左指针右移
            right--; //右指针左移
        }
        return true;//没有false的情况,返回true
    }
}

代码思路2

上面第一种方法被算法村的讲义说是逃避链表,面试不能这样,只能含泪考虑其他思路。
第二种思路是利用栈后进先出的特点,先把整个链表压入栈中,然后同时遍历链表和输出栈顶元素,一一比较,不相同则不是回文数

代码纯享版

/**
 * 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 boolean isPalindrome(ListNode head) {
         Stack<Integer> stack = new Stack<>(); 
         ListNode node = head;
         while(node != null){
             stack.push(node.val);
             node = node.next;
         }
         node = head;
         while(node != null){
             if(stack.pop() != node.val) return false;
             node = node.next;
         }
         return true;
     }
}

代码逐行解析版

class Solution {
     public boolean isPalindrome(ListNode head) {
         Stack<Integer> stack = new Stack<>(); //创建一个栈
         ListNode node = head; //创建node结点指向头结点
         while(node != null){ //node不为空时
             stack.push(node.val);//把node结点的值压入栈中
             node = node.next; //node指向下一个结点
         }
         node = head; //node重新指向头结点
         while(node != null){ //node不为空时
             if(stack.pop() != node.val) return false; //栈顶元素出栈,如果栈顶元素与node结点的值不相等,返回false
             node = node.next; //node指向下一个结点
         }
         return true;//没有false的情况,返回true
     }

}

结语

 如果这道题的分享对您有所帮助,点个关注,我会每天更新力扣题的讲解,与大伙儿一起向前迈进!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)

文章目录 前言分析解决方案一&#xff1a;替换创建项目的源方案二&#xff1a;升级JDK版本 参考文献 前言 起因 想创建一个springboot的项目&#xff0c;本地安装的是1.8&#xff0c;但是在使用Spring Initializr创建项目时&#xff0c;发现版本只有17和21。 在JDK为1.8的情况下…

岁月随笔-穿拖鞋的汉子

时间如白驹过隙般&#xff0c;转眼间2023年也只剩下最后的40天。汉子我拿出年初自己定的目标&#xff0c;立下的Flag&#xff0c;恍恍惚若昨天发生&#xff0c;不禁让人感慨万千。 其实最近自己遇到了很大的困惑&#xff0c;也导致了断更了一个月。自己逐渐摸不清自己的定位啦…

由走“贸工技”的联想联想到传统OEM,带给了自己那些思考?

2022年1月16日&#xff0c;自己来到魔都的第1597天&#xff0c;这城市还是保持着相似的容颜&#xff0c;而自己却悄悄的起了变化。 以前对时间概念其实不是特别敏感&#xff0c;感觉自己有大把的时光可以浪费&#xff08;虽然知道死亡是个永远无法逃避的话题&#xff09;&#…

Flink-简介与基础

Flink-简介与基础 一、Flink起源二、Flink数据处理模式1.批处理2.流处理3.Flink流批一体处理 三、Flink架构1.Flink集群2.Flink Program3.JobManager4.TaskManager 四、Flink应用程序五、Flink高级特性1.时间流&#xff08;Time&#xff09;和窗口&#xff08;Window&#xff0…

Oracle 中的操作符

1.union:对两个结果集进行并集操作&#xff0c;不包括重复行&#xff0c;同时进行默认规则的排序&#xff1b; SELECT * FROM emp WHERE sal < 1500 UNION SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000 order by 1 2.union All&#xff1a;对两个结果集进行并集操…

WebSocket协议测试实战

当涉及到WebSocket协议测试时&#xff0c;有几个关键方面需要考虑。在本文中&#xff0c;我们将探讨如何使用Python编写WebSocket测试&#xff0c;并使用一些常见的工具和库来简化测试过程。 1、什么是WebSocket协议&#xff1f; WebSocket是一种在客户端和服务器之间提供双向…

Prove that exponential function f(x)=e^x is not Lipschitz on R

https://math.stackexchange.com/questions/3980014/prove-that-ex-is-not-lipschitz-on-r https://math.ucr.edu/~res/math205A-2014/lipschitz2.pdf

大模型三阶段训练

为了训练专有领域模型&#xff0c;选择LLaMA2-7B作为基座模型&#xff0c;由于LLaMA模型中文词表有限&#xff0c;因此首先进行中文词表的扩展&#xff0c;然后进行三阶段训练&#xff08;增量预训练&#xff0c;有监督微调&#xff0c;强化学习&#xff09;。 代码将全部上传…

从0到1建立前端规范

本文适合打算建立前端规范的小伙伴阅读 一、为什么需要规范 规范能给我们带来什么好处&#xff0c;如果没有规范会造成什么后果&#xff1f;这里主要拿代码规范来说。 统一代码规范的好处&#xff1a; 提高代码整体的可读性、可维护性、可复用性、可移植性和可靠性&#xf…

计算机系统的层次结构与性能指标

目录 一. 计算机系统的层次结构二. 计算机性能指标2.1. 存储器的性能指标2.2 CPU的性能指标2.3 系统整体的性能指标2.4 系统整体的性能指标(动态测试) \quad 一. 计算机系统的层次结构 \quad \quad 虚拟机器的意思是看起来像是机器直接就能执行程序员所写的代码, 其实是需要通过…

[Matlab有限元分析] 2.杆单元有限元分析

1. 一维杆单元有限元分析程序 一维刚单元的局部坐标系&#xff08;单元坐标系&#xff09;与全局坐标系相同。 1.1 线性杆单元 如图所示是一个杆单元&#xff0c;由两个节点i和j&#xff0c;局部坐标系的X轴沿着杆的方向&#xff0c;由i节点指向j节点&#xff0c;每个节点有…

ZGC 垃圾回收过程

ZGC&#xff08;Z Garbage Collector&#xff09;是Java平台上的一种垃圾收集器&#xff0c;它是由Oracle开发的&#xff0c;旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器&#xff0c;它主要针对具有大内存需求和低停顿时间要求的应用程序 ZGC的核心概念及…

大数据平台/大数据技术与原理-实验报告--部署全分布模式Hadoop集群

实验名称 部署全分布模式Hadoop集群 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.10.16-2023.10.20 实验仪器设备以及实验软硬件要求 专业实验室&#xff08;配有cen…

【Android Gradle】之Gradle入门及 wrapper 生成(一)

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

Stm32CubeMx生成代码提示缺少“core_cm3.h“

Stm32CubeMx生成代码提示缺少"core_cm3.h" 1.原因分析 1.1问题根源 在我们使用本地解压的方法去安装固件包,但是找错了要下载的固件包&#x1f60a;.在你点击进入下载页面之后,能看到一共有两个下载链接,其中上面的是补丁包,而第二个才是我们应该要下载的固件包 当…

3DCAT为华东师大设计学院打造元宇宙数字虚拟学院

6月11日&#xff0c;华东师范大学设计学院在chi K11美术馆举办了一场别开生面的 2023 年本科毕业设计暨项目实践教学现场演示展。其中&#xff0c;元宇宙数字虚拟学院&#xff08;一期&#xff09;的现场发布会引起了现场震撼&#xff0c;吸引了众多观众的目光和参与。 该元宇宙…

数据库基础教程之序列自增设置(三)

点击public来选择一个模式。 选择其他-》序列。 选择新建序列。 设置序列参数&#xff08;最大值不超过2的63次方-1&#xff09;。 点击保存。 刷新序列列表&#xff0c;可以看见新建序列。 设置主键自增 打开设计表-》选中字段-》默认值设置为&#xff1a;nextval(‘log_text’…

如何在Ubuntu系统上安装MongoDB

简单介绍 MongoDB是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档&#xff0c;数…

GCPS—20型工程钻机的设计自动摊铺机的设计机械设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;摊铺机 获取完整论文报告工程源文件 摊铺机是一种复合式多功能摊铺机&#xff0c;为适应我国深基础和连续墙以及水利、纺织的发展与需要&#xff0c;结合大口径摊铺机灌注桩和地下连续墙施工的特点&#xff0c;为解决在复…

论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools

论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools 1. 文章简介2. 文章概括3 文章重点技术3.1 Toolformer3.2 APIs 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Toolformer: Language Models Can Teach Themselves to Use Tools作者&#…