日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

234. Palindrome Linked List 回文链表

發布時間:2024/5/17 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 234. Palindrome Linked List 回文链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
請判斷一個鏈表是否為回文鏈表。

示例 1:

輸入: 1->2 輸出: false

示例 2:

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

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

">

請判斷一個鏈表是否為回文鏈表。

示例 1:

輸入: 1->2 輸出: false

示例 2:

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

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

快慢指針

我們可以將鏈表的后半部分反轉(修改鏈表結構),然后將前半部分和后半部分進行比較。比較完成后我們應該將鏈表恢復原樣。雖然不需要恢復也能通過測試用例,但是使用該函數的人通常不希望鏈表結構被更改。

該方法雖然可以將空間復雜度降到 O(1),但是在并發環境下,該方法也有缺點。在并發環境下,函數運行時需要鎖定其他線程或進程對鏈表的訪問,因為在函數執行過程中鏈表會被修改。

整個流程可以分為以下五個步驟:

  • 找到前半部分鏈表的尾節點。
  • 反轉后半部分鏈表。
  • 判斷是否回文。
  • 恢復鏈表。
  • 返回結果。
  • 使用快慢指針在一次遍歷中找到:慢指針一次走一步,快指針一次走兩步,快慢指針同時出發。當快指針移動到鏈表的末尾時,慢指針恰好到鏈表的中間。通過慢指針將鏈表分為兩部分。

    若鏈表有奇數個節點,則中間的節點應該看作是前半部分。

    Code

    class Solution:def findFirstHalfEnd(self, node):fast = slow = nodewhile fast.next is not None and fast.next.next is not None:fast = fast.next.nextslow = slow.nextreturn slowdef reverseList(self, node):previous, current = None, nodewhile current is not None:nextNode = current.nextcurrent.next = previousprevious = currentcurrent = nextNodereturn previousdef isPalindrome(self, head: ListNode) -> bool:# 判斷邊界情況if head is None:return True# 找到前半部分鏈表的為節點并反轉后半部分鏈表firstHalfEnd = self.findFirstHalfEnd(head)secondHalfStart = self.reverseList(firstHalfEnd.next)# 判斷是否為回文ans, firstPosition, secondPosition = True, head, secondHalfStartwhile ans and secondPosition is not None:if firstPosition.val != secondPosition.val:return FalsefirstPosition = firstPosition.nextsecondPosition = secondPosition.next# 還原反轉的鏈表firstHalfEnd.next = self.reverseList(secondHalfStart)return ans

    復雜度分析

    • 時間復雜度:O(n)O(n)O(n),其中 nnn 指的是鏈表的大小。

    • 空間復雜度:O(1)O(1)O(1)。我們只會修改原本鏈表中節點的指向,而在堆棧上的堆棧幀不超過 O(1)O(1)O(1)

    總結

    以上是生活随笔為你收集整理的234. Palindrome Linked List 回文链表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。