回文链表- python-快慢指针-反转链表
·
题目:

思路:
- 找到中间的节点。因为链表没有len()求长度的函数,所以可以通过遍历链表同时计数求得长度。而一种更巧的方法是用快慢指针,快指针指到末尾,慢指针指到中间。
- 反转后半部分的链表,反转链表的具体实现是用双指针,可以看https://blog.csdn.net/m0_74164311/article/details/155111804?spm=1001.2014.3001.5501
https://blog.csdn.net/m0_74164311/article/details/155111804?spm=1001.2014.3001.5501
代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def isPalindrome(self, head: Optional[ListNode]) -> bool:
fast ,slow = head, head
while fast.next and fast.next.next: #终止条件
fast = fast.next.next # 快指针走两步
slow = slow.next #慢指针走一步
#反转后半部分链表
pre, curr = None, slow.next
while curr:
temp = curr.next
curr.next = pre
pre = curr
curr = temp
#逐步比较前、后部分
left, right = head, pre
while right:
if left.val != right.val:
return False
left = left.next
right = right.next
return True
更多推荐
所有评论(0)