LeetCode題目--迴文連結串列(python實現)
阿新 • • 發佈:2018-11-11
題目
請判斷一個連結串列是否為迴文連結串列。
示例 1:
輸入: 1->2 輸出: false
示例 2:
輸入: 1->2->2->1 輸出: true
進階:
你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題?
python程式碼實現:
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def isPalindrome(self, head): """ :type head: ListNode :rtype: bool """ if head == None or head.next == None: return True slow = fast = head while fast.next and fast.next.next: slow = slow.next fast = fast.next.next slow = slow.next slow = self.reverseList(slow) while slow: if head.val != slow.val: return False slow = slow.next head = head.next return True def reverseList(self, head): new_head = None while head: p = head head = head.next p.next = new_head new_head = p return new_head
方法二:
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def isPalindrome(self, head): """ :type head: ListNode :rtype: bool """ if head == None or head.next == None: return True slow = fast = head while fast and fast.next: slow = slow.next fast = fast.next.next # slow = slow.next slow = self.reverseList(slow) while slow: if head.val != slow.val: return False slow = slow.next head = head.next return True def reverseList(self, head): new_head = None while head: p = head head = head.next p.next = new_head new_head = p return new_head