当前位置: 首页 > news >正文

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

    力扣题目:回文链表

开篇

  今天是备战蓝桥杯的第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; //两个指针对应的数如果不相等,则不是回文,返回falseleft++; //左指针右移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结点的值不相等,返回falsenode = node.next; //node指向下一个结点}return true;//没有false的情况,返回true}

}

结语

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

http://www.lryc.cn/news/246031.html

相关文章:

  • php站点伪静态配置(Apache+Linux)
  • Figma 插件学习(二)- 常用属性和方法
  • 基于Flutter的图片浏览器的实现
  • STM32-使用固件库新建工程
  • 商用车量产智能驾驶路径思考
  • flink消费kafka限制消费速率
  • 搭建Appium工具环境
  • 【面经八股】搜广推方向:常见面试题(六)
  • 6.前端--CSS-基础选择器【2023.11.26】
  • Java制作“简易王者荣耀”小游戏
  • 正则表达式例题-PTA
  • 基于Python的南京二手房数据可视化分析的设计与实现
  • 软件特征与类型
  • 无人机遥控器方案定制_MTK平台无人设备手持遥控终端PCB板开发
  • 【C++】静态成员
  • 单片机学习10——独立按键
  • 微服务系列(三)--通过spring cloud zuul过滤器实现线上流量复制
  • 微信小程序image组件图片设置最大宽度 宽高自适应
  • 虚幻学习笔记—文本内容处理
  • WhatsApp API号解封教程(内含图片指引和申诉模板)
  • 爬取极简壁纸
  • docker操作手册
  • css Vue尺子样式
  • C++ 数据结构之-最小栈(MinStack)
  • 【日常总结】优雅升级Swagger 2 升至 3.0, 全局设置 content-type application/json
  • 2023.11.27如何使用内网穿透工具实现Java远程连接操作本地Elasticsearch搜索引擎
  • HNU 练习八 结构体编程题1. 评委打分
  • 数据结构:字典树(前缀树,Trie树),压缩字典树(Radix)
  • 前端学习系列之html
  • Star History 十月开源精选 |AI for Postgres