突然发现Python语法的优美和简洁,清爽,不拖泥带水。
龟叔(Guido van Rossum)就说:除了不能生孩子,python真的能干很多事。
# Definition for singly-linked list.
# 如果字节面试:时间复杂度O(n) ,空间复杂度O(1)
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
# 在规定的时间复杂度和空间复杂度的条件下来判断是否为回文链表。
class Solution():
def isPalindrome(self,head)->bool:
if head==None or head.next==None:
return True
dummy = ListNode(-1)
dummy.next = head
slow = dummy
fast = dummy
while fast and fast.next:
slow = slow.next
fast = fast.next.next
fast = slow.next
slow.next = None
slow = dummy.next
# 将后半段的链表逆置
pre = None
while fast:
temp = fast.next
fast.next =pre
pre = fast
fast = temp
while pre:
if pre.val!= slow.val:
return False
pre = pre.next
slow = slow.next
return True
if __name__ == "__main__":
s = Solution()
n2 = ListNode(1)
n3 = ListNode(2)
n4 = ListNode(1)
n2.next = n3
n3.next = n4
n4.next = None
print(s.isPalindrome(n2))
本文介绍了一种在限定时间和空间复杂度下判断链表是否为回文的Python实现方法。通过双指针技巧,首先找到链表中点,然后反转后半部分链表,并逐个比较前后两半部分的节点值,最终确定链表是否为回文。
672

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



