leetcode 234.迴文連結串列 Java

雲水冰發表於2020-10-22

題目連結

https://leetcode-cn.com/problems/palindrome-linked-list/

描述

請判斷一個連結串列是否為迴文連結串列。

進階:
你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題?

示例

示例 1:

輸入: 1->2
輸出: false

示例 2:

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

初始程式碼模板

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {

    }
}

程式碼

一邊遍歷,一遍反轉前一半的連結串列,如果需要還原連結串列的話,只要重新翻準一下即可。

/**
 * 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) {
            return true;
        }

        ListNode slow = head;
        ListNode fast = head;

        ListNode node = null;
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            ListNode slowNext = slow.next;
            slow.next = node;
            node = slow;
            slow = slowNext;
        }

        //節點數目是奇數
        if (fast != null) {
            slow = slow.next;
        }

        while (slow != null) {
            if (slow.val != node.val) {
                return false;
            }
            slow = slow.next;
            node = node.next;
        }

        return true;
    }
}

相關文章