234. 回文链表

题目描述

题目描述

题解(将值复制到数组中后用双指针法)

思路

将链表的值全部提取到数组(或 ArrayList)中,然后用双指针在数组上进行回文判断。

代码

java 复制代码
class Solution {
    public boolean isPalindrome(ListNode head) {
        // 1. 将链表中的所有值复制到 ArrayList 中
        List<Integer> vals = new ArrayList<>();
        ListNode currentNode = head;
        while (currentNode != null) {
            vals.add(currentNode.val);
            currentNode = currentNode.next;
        }

        // 2. 使用双指针在 ArrayList 上判断是否回文
        int front = 0;
        int back = vals.size() - 1;
        while (front < back) {
            // 注意:因为存储的是 Integer 对象,严谨起见应先转换为基本类型或使用 equals
            int frontVal = vals.get(front);
            int backVal = vals.get(back);
            
            if (frontVal != backVal) {
                return false;
            }
            front++;
            back--;
        }
       
        //while (front < back) {
       //    if (!vals.get(front).equals(vals.get(back))) {
       //         return false;
       //   }
       // front++;
       //back--;
       //}
        
        return true;
    }
}

复杂度分析

  • 时间复杂度:O(N)O(N)O(N)。遍历一次链表提取值 O(N)O(N)O(N),双指针遍历一次数组 O(N/2)O(N/2)O(N/2),总体时间依然是线性的。
  • 空间复杂度:O(N)O(N)O(N)。我们需要开辟一个额外的 ArrayList 来存储整条链表的值。
相关推荐
qfljg2 小时前
OpenRewrite 实战指南
java
Sylvia33.2 小时前
LOL实时数据接入深度解析:从WebSocket到完整数据模型
java·网络·python·websocket·网络协议
2601_962071577 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
zww89491118 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
淡海水8 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
leobertlan9 小时前
好玩系列:训练一个神经网络模型指导小孩玩游戏2-大局观教练
算法
Tisfy9 小时前
LeetCode 3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
算法·leetcode·题解·脑筋急转弯
乐迪信息10 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉
zww894911111 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
kiracrimson11 小时前
从缓存的角度看链表与线性表的差异
数据结构·链表·缓存