【LeetCode】234.Palindrome Linked List(Easy)解题报告

【LeetCode】234.Palindrome Linked List(Easy)解题报告

题目地址:https://leetcode.com/problems/palindrome-linked-list/description/
题目描述:

  Given a singly linked list, determine if it is a palindrome.

  把链表均分两部分,后半部分倒过来和前部分比较,最后reverse方法即206题。

Solutions:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {
        if (head == null || head.next == null)  return true; 
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        slow = reverse(slow);
        // Compare the two halves.
        while (slow != null) {
            if (slow.val != head.val)  return false; 
            slow = slow.next;
            head = head.next;
        }
        return true;
    }

    // Reverse a singly linked list headed at head ListNode.
    private ListNode reverse(ListNode head) {
        if (head == null || head.next == null)  return head; 
        ListNode prev = null;
        while (head != null) {
            ListNode realNext = head.next;
            head.next = prev;
            prev = head;
            head = realNext;
        }
        return prev;
    }
}

Date:2017年12月21日

你可能感兴趣的:(LeetCode)