import sys
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def strToList(s):
# 一行数字转换为 ListNode
nums = s.split(' ')
L = ListNode(0)
head = L
for n in nums:
head.next = ListNode(int(n))
head = head.next
return L.next
def listToStr(l):
# ListNode 转换为一行数字
res = ''
while l:
res += str(l.val) + ' '
l = l.next
return res[:-1]
# 逆置不带头结点的单链表
def reverse(head):
h = ListNode(0)
p = head
while p != None:
q = p.next
p.next = h.next
h.next = p
p = q
return h.next
def isPalindrome(head):
if head == None:
return True
slow = fast = head
# 查找中间结点slow
while fast != None and fast.next != None and fast.next.next != None:
slow = slow.next # 慢指针每次后移1个结点
fast = fast.next.next # 快指针每次后移2个结点
h = slow.next
slow.next = None
q = reverse(h) # 逆置不带头结点的单链表h
p = head
while p != None and q != None: # 比较对应的结点值
if p.val != q.val:
return False
p = p.next
q = q.next
if q == None:
return True
else:
return False
if __name__ == '__main__':
l = strToList(sys.stdin.readline())
print(isPalindrome(l))
python回文链表
最新推荐文章于 2024-03-05 09:41:27 发布
本文介绍了如何使用Python实现链表的基本操作,包括将字符串转换为链表(strToList),链表转换为字符串(listToStr),以及如何逆置链表(reverse)和判断链表是否为回文(isPalindrome)。通过实例展示了如何利用这些函数进行链表的处理和逻辑判断。
摘要由CSDN通过智能技术生成