LintCode 回文鏈表

題目

設計一種方式檢查一個鏈表是否為回文鏈表。

樣例
1->2->1 就是一個回文鏈表。

分析

鏈表由于其特殊的結構,沒法像數組那樣判斷回文,所以比較原始的方法,先找到鏈表的中間節點,然后將后半部分反轉,然后逐個比較即可。
鏈表中的算法,通常以尋找鏈表中間節點,反轉鏈表,合并兩個鏈表這些基本操作構成,所以掌握這些基本操作很重要。
例如本題中尋找鏈表的中間節點的方法,就是用兩個指針一快一慢,一個走兩步,一個走一步,快指針先走到底了,這時候慢指針就指向中間節點。

代碼

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    /**
     * @param head a ListNode
     * @return a boolean
     */
     public boolean isPalindrome(ListNode head) {
        if (head == null) {
            return true;
        }
        
        ListNode middle = findMiddle(head);
        middle.next = reverse(middle.next);
        
        ListNode p1 = head, p2 = middle.next;
        while (p1 != null && p2 != null && p1.val == p2.val) {
            p1 = p1.next;
            p2 = p2.next;
        }
        
        return p2 == null;
    }
    
    private ListNode findMiddle(ListNode head) {
        if (head == null) {
            return null;
        }
        ListNode slow = head, fast = head.next;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        
        return slow;
    }
    
    private ListNode reverse(ListNode head) {
        ListNode prev = null;
        
        while (head != null) {
            ListNode temp = head.next;
            head.next = prev;
            prev = head;
            head = temp;
        }
        
        return prev;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 設計一種方式檢查一個鏈表是否為回文鏈表。再用原地反轉解決一次
    鬼谷神奇閱讀 390評論 0 1
  • //leetcode中還有花樣鏈表題,這里幾個例子,冰山一角 求單鏈表中結點的個數----時間復雜度O(n)這是最...
    暗黑破壞球嘿哈閱讀 1,535評論 0 6
  • 1. 關于診斷X線機準直器的作用,錯誤的是()。 (6.0 分) A. 顯示照射野 B. 顯示中心線 C. 屏蔽多...
    我們村我最帥閱讀 10,832評論 0 5
  • 鏈表問題是面試過程中經常被問到的一部分,很考查編程功底。最近刷了 LeetCode 上鏈表部分的面試題,我總結了一...
    JohnnyShieh閱讀 4,984評論 0 9
  • 201. M-Q型顯影液組合是()。 (2.0 分) A. 米吐爾與菲尼酮的組合 B. 對苯二酚和菲尼酮的組合 C...
    我們村我最帥閱讀 3,647評論 0 4