# -*- coding:utf-8 -*-
'''
題目描述
請編寫一個函數,檢查鏈表是否爲迴文。
給定一個鏈表ListNode* pHead,請返回一個bool,代表鏈表是否爲迴文。
測試樣例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
@author chimuuu
'''
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Palindrome:
def isPalindrome(self, pHead):
# write code here
if pHead == None or pHead.next == None:
return True
pslow = pHead
pfast = pHead
stack = [pslow.val]
# 查找鏈表中心
while True:
# 奇數鏈,比較從後半部分第一個開始
if not pfast.next:
mid = pslow
break
# 偶數鏈,比較從後半部分第一個開始
elif pfast and not pfast.next.next:
mid = pslow.next
break
pslow = pslow.next
pfast = pfast.next.next
stack.append(pslow.val)
# 迴文對比
print stack
while stack and mid.next:
tmp = stack.pop()
if mid.val != tmp:
return False
print mid.val, tmp
mid = mid.next
return True
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
# node4 = ListNode(3)
node5 = ListNode(2)
node6 = ListNode(1)
node1.next = node2
node2.next = node3
node3.next = node5
# node4.next = node5
node5.next = node6
S = Palindrome()
p = S.isPalindrome(node1)
print(p)
檢查鏈表是否爲迴文 python實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.