链表的回文结构

简介: 题目描述 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。

题目描述
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
测试样例:
1->2->2->1
返回:true

大体思路:
通过快慢指针法得到mid(慢的依次存入栈),对奇偶情况进行处理
然后依次出栈和链表后一半元素比较

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

public class PalindromeList {

    public static Stack<Integer> stack = new Stack<Integer>();
    public static boolean chkPalindrome(ListNode A) {
        // write code here
        ListNode quick = A;
        ListNode slow = A;
        //快慢指针 得到mid
        while (quick != null && quick.next != null) {
            stack.push(slow.val);
            quick = quick.next.next;
            slow = slow.next;
        }
        if (quick == null) {   //偶数,正好得到一半后的第一个

        } else {    //quick.next == null   基数,得到中间的那个
            stack.pop();
            slow = slow.next;
        }

        while (slow != null) {
            if ((slow.val) != stack.pop()) {
                return false;
            }
           slow = slow.next;
        }
        return true;
    }
    public static void main(String[] args) {
        ListNode A = new ListNode(1);
        ListNode B = new ListNode(2);
        ListNode C = new ListNode(2);
        ListNode D = new ListNode(1);
        A.next = B;
        B.next = C;
        C.next = D;
        System.out.println(chkPalindrome(A));
    }
}
目录
相关文章
|
2月前
【数据结构】环形、相交、回文、分割、合并、反转链表
【数据结构】环形、相交、回文、分割、合并、反转链表
31 0
|
4月前
【刷题记录】链表的回文结构
【刷题记录】链表的回文结构
|
4月前
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
124 0
|
5月前
【数据结构OJ题】链表的回文结构
牛客题目——链表的回文结构
48 0
【数据结构OJ题】链表的回文结构
|
4月前
|
Python
【Leetcode刷题Python】234.回文链表
两种判断链表是否为回文的方法:使用栈和拆分为两个链表后反转对比,并给出了相应的Python代码实现。
26 0
|
6月前
|
存储 算法
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
92 0
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
|
6月前
|
算法 C语言
【数据结构与算法 经典例题】链表的回文结构(图文详解)
【数据结构与算法 经典例题】链表的回文结构(图文详解)
|
6月前
|
存储
【数据结构】详解链表结构
【数据结构】详解链表结构
33 0
|
7月前
题目----力扣--回文链表
题目----力扣--回文链表
42 0
|
7月前
|
索引
【力扣刷题】回文链表、环形链表、合并两个有序链表
【力扣刷题】回文链表、环形链表、合并两个有序链表
41 0