LeetCode 234:Palindrome Linked List

Posted 一只菜鸡的奋斗史

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 234:Palindrome Linked List相关的知识,希望对你有一定的参考价值。

题意描述

给定一个单链表,确定它是否是回文。

测试用例

Input: 1->2

Output: false

Input: 1->2->2->1

Output: true

解题思路

一、思路一

  1. 使用快慢指针,快指针fast一次走两步,慢指针slow一次走一步。当fast走到尾部时,slow走到链表中间。
  2. 将后半段链表反转,slow指向反转链表的头部,fast指向旧链表的头部
  3. 逐个比较新旧链表的值,如果不相等,则返回false;如果节点为奇数,也会返回false,因为中间的节点无法匹配。
    class Solution {
        public boolean isPalindrome(ListNode head) {
            if(head == null) return true;
            ListNode fast = head;
            ListNode slow = head;
            //fast走到尾部,slow走到中间
            while(fast != null && fast.next != null){
                fast = fast.next.next;
                slow = slow.next;
            }
            slow = reserver(slow);	//反转
            fast = head;
            //逐个比较
            while(slow != null){
                if(fast.val != slow.val){
                    return false;
                }
                fast = fast.next;
                slow = slow.next;
            }
            return true;

        }
        //头插法反转
        private ListNode reserver(ListNode head){
            ListNode node = null;
            while(head != null){
                ListNode next = head.next;
                head.next = node;
                node = head;
                head = next;
            }
            return node;
        }
    }

二、思路二

利用递归

  1. 先使用临时节点递归遍历到链表尾部。
  2. 判断尾部元素与链表头部元素是否相等,如果相等,返回true,向上回溯至(i-1)层。
  3. 继续判断第二个元素与(i-1)是否相等
    class Solution {
        ListNode node;
        public boolean isPalindrome(ListNode head) {
            node = head;
            return check(head);
        }
        private boolean check(ListNode head){
            if(head == null) return true;
            boolean ans = check(head.next);	//如果遍历到尾部,向上回溯返回true
            boolean iseq = (node.val == head.val) ? true : false;	//第i个元素与(n-i)个元素比较
            node = node.next;
            return ans && iseq;
        }
    }

以上是关于LeetCode 234:Palindrome Linked List的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 234. Palindrome Linked List

Java [Leetcode 234]Palindrome Linked List

LeetCode 234. Palindrome Linked List

leetcode 234. Palindrome Linked List

LeetCode 234 Palindrome Linked List

LeetCode234. Palindrome Linked List