码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 234:Palindrome Linked List

时间:2020-05-13 23:26:04      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:比较   vat   链表   list   lis   fas   als   判断   class   

题意描述

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

测试用例

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

标签:比较   vat   链表   list   lis   fas   als   判断   class   

原文地址:https://www.cnblogs.com/le-le/p/12885401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!