标签:
Problem Definition:
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
思路:为了达到O(1)的时间复杂度,可以把单链表的后半部分反转。
代码:
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # @param {ListNode} head # @return {boolean} def isPalindrome(self, head): if head==None: return True tail=head tailNext=tail.next length=1 while tailNext!=None: tail=tailNext tailNext=tailNext.next length+=1 if length==1: return True half=length/2 newHead=head n=0 while n<half: newHead=newHead.next n+=1 if length%2==1: #odd number newHead=newHead.next #reverse while newHead!=tail: newHeadNext=newHead.next newHead.next=tail.next tail.next=newHead newHead=newHeadNext while newHead!=None: if head.val!=newHead.val: return False head=head.next newHead=newHead.next return True
LeetCode#234 Palindrome Linked List
标签:
原文地址:http://www.cnblogs.com/acetseng/p/4649311.html