Python中链表的判断回文字符串的优化算法

2023-04-11 00:00:00 算法 字符串 回文

链表判断回文字符串的优化算法可以使用快慢指针和栈结构相结合的方法。

具体步骤如下:

1.使用快慢指针找到链表的中间节点。

2.把中间节点之后的所有节点入栈。

3.从链表头开始遍历链表,同时从栈顶弹出元素,比较它们的值是否相等。如果所有的元素都相等,则链表为回文字符串。

下面是代码演示:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def isPalindrome(head: ListNode) -> bool:
    stack = []
    slow = fast = head

    #使用快慢指针找到链表的中间节点
    while fast and fast.next:
        stack.append(slow.val)
        slow = slow.next
        fast = fast.next.next

    #处理链表长度为奇数的情况
    if fast:
        slow = slow.next

    #从链表头开始遍历链表,同时从栈顶弹出元素,比较它们的值是否相等
    while slow:
        if slow.val != stack.pop():
            return False
        slow = slow.next

    return True

#测试代码
head = ListNode('p')
head.next = ListNode('i')
head.next.next = ListNode('d')
head.next.next.next = ListNode('a')
head.next.next.next.next = ListNode('n')
head.next.next.next.next.next = ListNode('c')
head.next.next.next.next.next.next = ListNode('o')
head.next.next.next.next.next.next.next = ListNode('d')
print(isPalindrome(head)) #输出:True

相关文章