• Java判断链表是否为回文链表


    请判断一个链表是否为回文链表。

    示例 1:

    输入: 1->2
    输出: false

    示例 2:

    输入: 1->2->2->1
    输出: true

    思路:

    1.通过快慢指针,来遍历链表,当快指针走到末尾时,慢指针即指向链表中点
    2.将后半段反转
    3.将后半段与前半段进行对比,如果data相同,则继续遍历,直至到达末尾,return ture, 如果中间匹配不相同,return false

    代码实现:

    简单定义一个节点类型:
    class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }
    }

    判断是否为回文链表的API

        /**
         * 判断链表是否为回文链表
         *
         * @param head
         * @return
         */
        public static boolean isPalindrome(ListNode head) {
            //如果链表只有一个有效节点或者没有有效节点,return true
            if (head == null || head.next == null) {
                return true;
            }
            ListNode quick = head;
            ListNode slow = head;
            //快慢指针,快指针一次走两步,慢指针一次走一步
            while (quick != null && quick.next != null) {
                quick = quick.next.next;
                slow = slow.next;
            }
            //从slow开始反转后半段链表
            ListNode pre = null;
            ListNode p = slow;
            while (p != null) {
                ListNode temp = p.next;
                p.next = pre;
                pre = p;
                p = temp;
            }
            //对比前半段和后半段的data值是否相同
            while (pre != null) {
                if (pre.val == head.val) {
                    pre = pre.next;
                    head = head.next;
                } else {
                    return false;
                }
            }
            //返回true
            return true;
        }

    测试:

        public static void main(String[] args) {
            //测试
            ListNode head = new ListNode(1);
            ListNode p2 = new ListNode(2);
            ListNode p3 = new ListNode(2);
            ListNode p4 = new ListNode(1);
            head.next = p2;
            p2.next = p3;
            p3.next = p4;
            System.out.println(isPalindrome(head));
        }

    结果:

    true

  • 相关阅读:
    Tomcat gzip果然强大,js文件压缩率50%以上
    URAL 1748
    URAL 1698
    [置顶] Spring中自定义属性编辑器
    Java-类库:lombok
    专业词汇:日志(log)
    SpringBoot-application:application.yml/配置文件详解
    SpringBoot:目录
    Java-Maven-pom.xml-porject-parent:parent
    Java-Maven-pom.xml-project-packaging:packaging(war/jar)
  • 原文地址:https://www.cnblogs.com/jiezai/p/11193221.html
Copyright © 2020-2023  润新知