检查链表是否为回文 python实现

来源:互联网 发布:搜索算法工程师 编辑:程序博客网 时间:2024/06/05 02:58
# -*- 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 = Noneclass 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 Truenode1 = ListNode(1)node2 = ListNode(2)node3 = ListNode(3)# node4 = ListNode(3)node5 = ListNode(2)node6 = ListNode(1)node1.next = node2node2.next = node3node3.next = node5# node4.next = node5node5.next = node6S = Palindrome()p = S.isPalindrome(node1)print(p)