Python程序检查链表元素是否构成回文
假设我们有一个链表。我们需要检查链表元素是否构成回文。例如,列表元素为[5,4,3,4,5],则为回文;而列表元素为[5,4,3,2,1]则不是回文。
为了解决这个问题,我们将遵循以下步骤:
- fast := head,slow := head,rev := None,flag := 1
- 如果head为空,则返回true
- 当fast及其下一个节点存在时
- 如果fast的下一个节点的下一个节点存在,则设置flag := 0并中断循环
- fast := fast的下一个节点的下一个节点
- temp := slow,slow := slow的下一个节点
- temp的下一个节点 := rev,rev := temp
- fast := slow的下一个节点,slow的下一个节点 := rev
- 如果flag已设置,则slow := slow的下一个节点
- 当fast和slow都不为空时
- 如果fast的值与slow的值不同,则返回false
- fast := fast的下一个节点,slow := slow的下一个节点
- 返回true
让我们来看下面的实现,以便更好地理解:
示例
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 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([5,4,3,4,5]) ob1 = Solution() print(ob1.isPalindrome(head))
输入
[5,4,3,4,5]
输出
True
广告