# -*- 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实现
最新推荐文章于 2021-12-28 21:43:15 发布
该博客介绍了一个使用Python编写的函数,用于检查链表是否为回文。通过创建两个指针,一个慢指针`pslow`和一个快指针`pfast`,寻找链表的中心点。然后将后半部分链表的元素压入栈中,并与前半部分链表的元素进行比较,从而判断链表是否为回文。示例中给出了包括奇数长度和偶数长度链表的测试用例。
675

被折叠的 条评论
为什么被折叠?



