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

LeetCode热题100--234.回文链表--简单

1. 题目

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:
请添加图片描述
输入:head = [1,2,2,1]
输出:true

示例 2:
请添加图片描述
输入:head = [1,2]
输出:false

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> vals = new ArrayList<Integer>();//将链表的值复制到数组中ListNode currentNode = head;while(currentNode != null){vals.add(currentNode.val);currentNode = currentNode.next;}//使用双指针判断是否回文int front = 0;int back = vals.size() - 1;while(front < back){if (!vals.get(front).equals(vals.get(back))){return false;}front++;back--;}return true;}
}

3. 解析

官方回答:回文链表

  1. 1-4. ListNode currentNode head; while(currentNode != null) {…} - 将头节点赋值给变量currentNode,然后进入循环直到currentNode为null。

  2. 5.vals.add(currentNode.val); - 每次迭代时,都会将当前节点的值添加到列表vals中。
    6-7: front = 0; back = vals.size() - 1; - 初始化两个指针:前指针front和后指针back,分别从数组两端开始。

  3. 9-12. if (!vals.get(front).equals(vals.get(back))) { return false; } front++; back–; - 然后进入循环直到front >= back。如果前指针对应的值和后指针对应的值不相等,则返回false(因为这意味着链表不是回文)。否则,将前指针加1并减小后指针以向中间移动。

  4. 13.return true; - 如果while循环结束时没有找到两个位置上的元素不相同,那么该函数返回true,表示链表是回文的。

  5. 这段代码的时间复杂度为O(n),其中n是单链表中的节点数,因为我们需要遍历整个列表一次来将值复制到vals中。空间复杂度也为O(n),因为我们在创建一个新的ArrayList来存储所有的值。

http://www.dtcms.com/a/189987.html

相关文章:

  • 院校机试刷题第二天:1479 01字符串、1701非素数个数
  • 部署GraphRAG配置Neo4j实现知识图谱可视化【踩坑经历】
  • 用git下载vcpkg时出现Connection was reset时的处理
  • Yolov8的详解与实战-深度学习目标检测
  • 在Spark搭建YARN
  • [:, :, 1]和[:, :, 0] 的区别; `prompt_vector` 和 `embedding_matrix`的作用
  • Pinecone 向量数据库的连接以及增删改查操作讲解
  • 51单片机——交通指示灯控制器设计
  • Tailwind CSS 实战教程:从入门到精通
  • (C语言)超市管理系统(测试2版)(指针)(数据结构)(清屏操作)
  • UI 原型设计:交互规则的三要素——重要性、原则与实践
  • 浅析 Golang 内存管理
  • K8S redis 部署
  • nvrtc环境依赖
  • 数据库常见故障排查
  • Java GUI开发全攻略:Swing、JavaFX与AWT
  • 深入理解SpringBoot中的SpringCache缓存技术
  • 2025年PMP 学习十二 第9章 项目资源管理
  • iOS 阅后即焚功能的实现
  • “海外滴滴”Uber的Arm迁移实录:重构大规模基础设施​
  • 前端实践:打造高度可定制的Vue3时间线组件——图标、节点与连接线的个性化配置
  • Keil5 MDK 安装教程
  • 医学影像系统的集成与工作流优化
  • 数据结构中的高级排序算法
  • 【C++设计模式之Decorator装饰模式】
  • PPO算法:一种先进的强化学习策略
  • WeakAuras Lua Script ICC (BarneyICC)
  • Python中列表(list)知识详解(2)和注意事项以及应用示例
  • lua 作为嵌入式设备的配置语言
  • java加强 -stream流