迴文連結串列在 Python 中
假設我們有一個連結串列。我們必須檢查連結串列元素是否形成迴文。因此,如果連結串列元素是 [1,2,3,2,1],則這是迴文。
要解決這個問題,我們將遵循以下步驟 −
fast := head, slow := head, rev := None 且 flag := 1
如果 head 為空,則返回 True
當 fast 和 fast 的下一個可用時
如果 fast 的下下一個可用,則設定 flag := 0 並 break 迴圈
fast := fast 的下下一個
temp := slow, slow := slow 的下一個
temp 的下一個 := rev,且 rev := temp
fast := slow 的下一個,且 slow 的下一個 := rev
如果 flag 設定,則 slow := slow 的下一個
當 fast 和 slow 均不為 None 時
如果 fast 的值不與 slow 的值相同,則返回 False
fast := fast 的下一個,且 slow := slow 的下一個
返回 True
示例(Python)
以下是示例程式碼,可以幫助我們更好地理解 −
class ListNode: def __init__(self, data, next = None): self.data = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head class Solution(object): def isPalindrome(self, head): fast,slow = head,head rev = None flag = 1 if not head: return True while fast and fast.next: if not fast.next.next: flag = 0 break fast = fast.next.next temp = slow slow = slow.next temp.next = rev rev = temp #print(fast.val) fast = slow.next slow.next = rev if flag: slow = slow.next while fast and slow: if fast.data != slow.data: return False fast = fast.next slow = slow.next return True head = make_list([1,2,3,2,1]) ob1 = Solution() print(ob1.isPalindrome(head))
輸入
[1,2,3,2,1]
輸出
True
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP