版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maotianyi941005/article/details/86076151
234. Palindrome Linked List (Easy)
Given a singly linked list, determine if it is a palindrome.
Example 1:
Input: 1->2 Output: falseExample 2:
Input: 1->2->2->1 Output: trueFollow up:
Could you do it in O(n) time and O(1) space?
思路 前一半先reverse,再前后一半顺序比较
如果n为奇数如[1 , 0 , 1] 则中间的数字跳过
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def isPalindrome(self, head):
"""
:type head: ListNode
:rtype: bool
"""
if not head or not head.next:return True
if not head.next.next and head.val != head.next.val:return False
elif not head.next.next and head.val == head.next.val:return True
n = 0
node = head
while(node):
n += 1
node = node.next
node = head.next
pre = head
#reverse
for i in range(1,int(n/2)):
aft = node.next
node.next = pre
pre = node
node = aft
if n%2 != 0:node = node.next
for i in range(int(n/2)):
if node.val != pre.val:return False
pre = pre.next
node = node.next
return True