链表--回文字符串

作者: 暮想sun | 来源:发表于2019-12-17 17:40 被阅读0次

字符串通过链表存储

a->b->c->b->a
使用双指针形式,慢指针向后走一步,快指针向后走两步。当快指针走到尾结点时,慢指针走到终点。逆序比较

    public static void main(String[] args) {
        LinkedNode linkedNode5 = new LinkedNode("a");

        LinkedNode linkedNode4 = new LinkedNode("b",linkedNode5);

        LinkedNode linkedNode3 = new LinkedNode("c",linkedNode4);

        LinkedNode linkedNode2 = new LinkedNode("c",linkedNode3);

        LinkedNode linkedNode1 = new LinkedNode("b",linkedNode2);

        LinkedNode linkedNode0= new LinkedNode("a",linkedNode1);

        System.out.println(isPalindrome(linkedNode0));

    }


    public static Boolean isPalindrome(LinkedNode node) {

        //如果只有一个节点有数据,必然是真的
        if (node == null || node.next == null) {
            return true;
        }

        //尽快走到链尾
        LinkedNode p = node;

        //寻找中间结点
        LinkedNode q = node;

        //p或者p.next为空时,此时q正是中间结点。
        LinkedNode prev = null;
        LinkedNode temp ;
        while (p != null && p.next != null) {

            //p节点向后两步
            p = p.next.next;

            //q节点逆序
            temp = q.next;
            q.next = prev;
            prev = q;


            //q节点向后一步
            q = temp;

        }

        //奇数,此时q节点在中间结点。q的下一结点,与prev比较。偶数,q为中间偏右结点。q和prev比较
        if (p !=null){
            q=q.next;
        }

        while (q !=null && prev !=null){
            if(!q.item.equals(prev.item)){
                return false;
            }

            q= q.next;
            prev = prev.next;
        }

        return true;
    }

    private static class LinkedNode {

        private String item;

        private LinkedNode next;

        public LinkedNode(String item) {
            this.item = item;
        }

        public LinkedNode(String item, LinkedNode next) {
            this.item = item;
            this.next = next;
        }
    }

相关文章

  • 字符串进阶

    1.反转字符串 2.字符串包含问题 3.字符串转数字 4.判断是否为回文判断一条单向链表是不是“回文” 分析:对于...

  • 【日拱一卒】链表——回文判断

    需求 判断一个链表是否是回文链表 回文的形式大家应该都知道,类似 这种对称的方式都是回文。 难点 如果将链表形式换...

  • LeetCode 234. 回文链表

    234. 回文链表 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2输出: false 示例 2: 输...

  • 漫谈递归-回文链表

    题目 234. 回文链表请判断一个链表是否为回文链表。 测试 示例 1:输入: 1->2输出: false 示例 ...

  • 2018-11-01 单向链表判断回文字

    首先阐述下回文字的概念,回文字是12321这种对称性字符串. 现在用单向链表存储. 每个节点存储一个字符. 那么怎...

  • 02-14:leetcode重刷8之哈希与数组

    链表: 判断链表是否环形、是否回文 1、是否链表 #Definitionforsingly-linkedlist....

  • 2019-02-19 Day 45 待提高

    1.回文链表请判断一个链表是否为回文链表。 示例 1: 输入: 1->2输出: false示例 2: 输入: 1-...

  • 链表--回文字符串

    字符串通过链表存储 a->b->c->b->a使用双指针形式,慢指针向后走一步,快指针向后走两步。当快指针走到尾结...

  • LeetCodeDay13 —— 回文链表&环形链表

    234. 回文链表 描述 请检查一个链表是否为回文链表。 进阶 你能在 O(n) 的时间和 O(1) 的额外空间中...

  • Swift 回文链表 - LeetCode

    题目: 回文链表 请判断一个链表是否为回文链表。 示例1: 示例2: 进阶你能否用 O(n) 时间复杂度和 O(...

网友评论

    本文标题:链表--回文字符串

    本文链接:https://www.haomeiwen.com/subject/zxnsnctx.html