news 2026/6/13 2:39:23

使用 Java 集合类中的 LinkedList 模拟栈以此判断字符串是否是回文

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Java 集合类中的 LinkedList 模拟栈以此判断字符串是否是回文

一、目的

1. 掌握栈后进先出的核心特性,理解利用栈判断回文字符串的原理;

2. 掌握Java集合中 LinkedList 的使用,理解其模拟栈的两种实现方式;

二、实验步骤与常见问题及解决过程

1.解释使用栈判断回文的原理

1.1回文的定义:回文是指一个字符串正读和反读完全一致(如 abba、abcba)。

1.2栈的特性:后进先出。

1.3用栈判断回文的核心思路:利用栈的反转特性:将所有字符压入栈再依次取出可以达到逆转字符串的功能,最后将得到的字符串与原字符串进行对比。

1.4实验步骤

1)入栈:将字符串的每个字符依次压入栈中

2)出栈对比:将栈中的字符依次弹出,与原字符串的字符从头开始逐一比对;

3)结果判断:若所有字符都匹配,则是回文;若任意位置不匹配,则不是回文。

2.使用LinkedList中的哪些方法来代替入栈与出栈

2.1方法一:栈顶对应 LinkedList 的尾部(用 addLast 和 removeLast 方法)

2.1.1代码展示:

import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String[] args) { // 创建扫描器接收用户输入 Scanner scanner = new Scanner(System.in); System.out.print("请输入待判断的字符串:"); String input = scanner.nextLine(); // 调用回文判断方法 boolean isPalindrome = checkPalindrome(input); // 输出判断结果 if (isPalindrome) { System.out.println(input + " 是回文字符串"); } else { System.out.println(input + " 不是回文字符串"); } scanner.close(); } public static boolean checkPalindrome(String str) { // 1. 初始化LinkedList模拟栈 LinkedList<Character> stack = new LinkedList<>(); // 2. 入栈:将字符串每个字符添加到链表尾部 for (int i = 0; i < str.length(); i++) { stack.addLast(str.charAt(i)); } // 3. 出栈对比:弹出尾部字符(模拟pop),与原字符串从头比对 for (int i = 0; i < str.length(); i++) { char popChar = stack.removeLast(); // 栈空时removeLast会抛异常,但str长度匹配时不会触发 if (popChar != str.charAt(i)) { return false; // 任意字符不匹配,直接返回false } } return true; } }

2.1.2运行结果展示

1)回文字符串测试

2)非回文字符串测试

2.2方法二:栈顶对应 LinkedList 的头部(用 push 和 pop 方法)

2.2.1 代码展示:

import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入待判断的字符串:"); String input = scanner.nextLine(); // 调用回文判断方法 boolean isPalindrome = checkPalindrome(input); // 输出判断结果 if (isPalindrome) { System.out.println(input + " 是回文字符串"); } else { System.out.println(input + " 不是回文字符串"); } scanner.close(); // 关闭扫描器释放资源 } public static boolean checkPalindrome(String str) { LinkedList<Character> stack = new LinkedList<>(); // 入栈:push()加到链表头部 for (int i = 0; i < str.length(); i++) { stack.push(str.charAt(i)); } // 出栈:pop()取出逆序序列,与原字符串的正序比对 for (int i = 0; i < str.length(); i++) { char popChar = stack.pop(); // 直接和原字符串的第i位进行对比 if (popChar != str.charAt(i)) { return false; } } return true; } }

2.2.2 运行结果展示

1)回文字符串测试

2)非回文字符串测试

实验小

3.1学习思考

一开始把 LinkedList 中的 push 和 pop 方法与 C++ STL 的 <stack> 中的 push 和 pop 函数混为一谈了,<stack> 中的 push 是向底层容器的尾部压入元素;pop 是从底层容器的尾部弹出元素,于是理所当然认为 LinkedList 中的 push 和 pop 方法也是对链表的尾部进行操作。但其实事实是,LinkedList 的 push 和 pop 方法是对链表的头部进行操作,原理是 LinkedList 实现了 Deque(双端队列)接口,而 Deque 对栈的模拟遵循头部为栈顶的约定。

3.2学习记录

LinkedList模拟栈的核心方法对照表:

方法

底层调用

作用

对应栈操作

push(E e)

addFirst(e)

把元素加到链表头部

入栈

pop()

removeFirst()

移除并返回链表头部元素

出栈

peek()

getFirst()

获取头部元素(不删除)

查看栈顶

栈的核心是后进先出,栈顶不论是对应链表的头部还是尾部,只是具体实现细节,只要入栈和出栈的位置一一匹配,就能保证栈的核心特性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 18:08:23

Langchain-Chatchat结合ELK构建日志分析平台

Langchain-Chatchat 结合 ELK 构建智能日志分析平台 在现代企业 IT 环境中&#xff0c;一个服务异常往往伴随着成千上万行日志输出。运维工程师面对的不再是单一系统的简单报错&#xff0c;而是微服务架构下跨多个模块、层层嵌套的日志洪流。传统的“登录 Kibana → 写 DSL 查询…

作者头像 李华
网站建设 2026/6/12 1:52:54

计算机就业卷疯了!AI 抢岗 + 红海扎堆,年轻人还能找到工作?

现在学计算机的年轻人&#xff0c;已经找不到工作了? 近几年的就业市场&#xff0c;开始进入了白热化的竞争阶段。年轻人的学历含金量&#xff0c;也已经有了新的排序。 “过去大家只要毕业于一本大学&#xff0c;便等于有了求职底牌。后来大公司招人的最低门槛&#xff0c;变…

作者头像 李华
网站建设 2026/6/13 12:40:53

重庆市万州区综合交通体系规划(2021—2035 年)(公开版) 2025

《重庆市万州区综合交通体系规划&#xff08;2021—2035 年&#xff09;》围绕万州区交通发展的现状、目标与路径展开全面规划&#xff0c;核心内容如下&#xff1a;一、规划背景与核心目标背景&#xff1a;立足长江经济带、成渝地区双城经济圈建设等国家战略&#xff0c;响应万…

作者头像 李华
网站建设 2026/6/13 3:49:46

【毕业设计】SpringBoot+Vue+MySQL MVC自习室管理和预约系统平台源码+数据库+论文+部署文档

摘要 随着高校扩招和教育信息化的快速发展&#xff0c;自习室资源紧张和管理效率低下的问题日益突出。传统自习室管理依赖人工登记和纸质记录&#xff0c;不仅效率低下&#xff0c;还容易出现座位冲突、资源浪费等问题。为了解决这一问题&#xff0c;开发一套高效、智能的自习室…

作者头像 李华
网站建设 2026/6/12 4:18:35

SpringBoot+Vue 影院购票系统管理平台源码【适合毕设/课设/学习】Java+MySQL

摘要 随着互联网技术的快速发展和数字化服务的普及&#xff0c;传统影院购票方式已无法满足现代消费者的需求。线下购票存在排队时间长、座位选择受限、信息不对称等问题&#xff0c;而线上购票系统能够提供更高效、便捷的服务体验。影院购票系统管理平台的开发旨在解决这些问题…

作者头像 李华
网站建设 2026/6/13 12:19:36

智能体在车联网中的应用:第8天 核心工具链与仿真世界:Git与代码版本管理——车联网开发的协作基石

引言&#xff1a;一行代码引发的“灾难”与版本控制的救赎 想象一下这个在车联网开发中可能发生的场景&#xff1a;经过一周的奋战&#xff0c;你终于将激光雷达点云聚类算法的准确率从87%提升到了92%。为了追求极致&#xff0c;你决定尝试一个更激进的特征提取方法。几番修改后…

作者头像 李华