Given a singly linked list, determine if it is a palindrome.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
if(head==None or head.next==None):
return True
slow=head
fast=head.next
while(fast and fast.next):
slow=slow.next
fast=fast.next.next
prev=slow
slow=slow.next
prev.next=None
pBefore=None
while(slow):
pNext=slow.next
slow.next=pBefore
pBefore=slow
slow=pNext
while(head!=None and pBefore!=None):
if(pBefore.val!=head.val):
return False
pBefore=pBefore.next
head=head.next
return True
同样使用前后指针法得到中间的点,slow始终指向中点,fast始终是slow的两倍,要将slow作为第一个链表的终点,要它的next置为空,还要注意后面半个链表反转的时候的头是pBefore.
本文介绍了一种通过双指针法找到链表中点,并反转后半部分链表来判断链表是否为回文的有效算法。该算法适用于单链表,通过比较前后两部分节点值来确定整个链表是否对称。
506

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



