LeetCode 234 回文表

題目

請(qǐng)判斷一個(gè)鏈表是否為回文鏈表。
示例 1:
輸入: 1->2
輸出: false

示例 2:
輸入: 1->2->2->1
輸出: true
進(jìn)階:
你能否用 O(n) 時(shí)間復(fù)雜度和 O(1) 空間復(fù)雜度解決此題?

思路

  1. 利用雙指針找到鏈表的中間位置
    每一次慢指針移動(dòng)一步,快指針移動(dòng)兩步,當(dāng)快指針遍歷到鏈表最后的時(shí)候,慢指針正好指向鏈表中間節(jié)點(diǎn)
  2. 將后半部分鏈表反轉(zhuǎn)
  3. 反轉(zhuǎn)后,遍歷比較前半段和后半段鏈表,主要終止條件

代碼

class Solution(object):
    def isPalindrome(self, head):
        if head == None or head.next == None:
            return True
        slow = head
        fast = head
        while fast and fast.next: # 注意終止條件
            slow = slow.next
            fast = fast.next.next

        mid = slow # 找到鏈表的中間節(jié)點(diǎn)
        new_head = None
        while mid: # 將后半段鏈表反轉(zhuǎn)
            nxt = mid.next
            mid.next = new_head
            new_head.next = mid
            mid = nxt

        while head != slow: # 判斷是否是回文表
            if head.val == new_head.val:
                head = head.next
                new_head = new_head.next
            else:
                return False
        return True
    

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 鏈表刪除[203] Remove Linked List Elements[19] Remove Nth Node...
    野狗子嗷嗷嗷閱讀 6,430評(píng)論 4 35
  • 大學(xué)的時(shí)候不好好學(xué)習(xí),老師在講臺(tái)上講課,自己在以為老師看不到的座位看小說(shuō),現(xiàn)在用到了老師講的知識(shí),只能自己看書(shū)查資...
    和玨貓閱讀 1,548評(píng)論 1 3
  • 1. 找出數(shù)組中重復(fù)的數(shù)字 題目:在一個(gè)長(zhǎng)度為n的數(shù)組里的所有數(shù)字都在0到n-1的范圍內(nèi)。數(shù)組中某些數(shù)字是重復(fù)的,...
    BookThief閱讀 1,999評(píng)論 0 2
  • (一)LeetCode206.反轉(zhuǎn)鏈表 題目描述: 反轉(zhuǎn)一個(gè)單鏈表。 代碼實(shí)現(xiàn) (二)LeetCode160. 相...
    Jarily閱讀 1,476評(píng)論 0 5
  • 每次上完張校的課后就感覺(jué)心變得很平靜,輕松,愉悅。似乎突然學(xué)到了很多,可又具體不到一個(gè)點(diǎn)上。只有在平時(shí)溝通時(shí)下...
    一一媽2011閱讀 187評(píng)論 0 0

友情鏈接更多精彩內(nèi)容