【VIP】【链表翻转】234. Palindrome Linked List【E】【94】

来源:互联网 发布:韩火火淘宝店衣服 编辑:程序博客网 时间:2024/05/21 09:25

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?


Subscribe to see which companies asked this question




两种方法,注释掉的比较流氓,把链表的东西拿出来放进list里,然后翻转比较

第二种方法比较正常,而且也满足O(1)的空间条件,设置一快一慢两个pointer,快的走到头的时候,慢的正好在中间
慢的每走一步,都进行一次链表翻转。

然后逐个节点比较





# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def isPalindrome(self, head):        if head == None or head.next == None :            return True                h = head         fast = head        slow = head        prv = None        temp = None                while fast and fast.next:            fast = fast.next.next            temp = slow.next            slow.next = prv            prv = slow            slow = temp                slow = prv        if fast:            temp = temp.next                '''        while temp:            print temp.val            temp = temp.next        print '----'        while slow:            print slow.val            slow = slow.next        '''                while temp and slow:            #print temp.val            if temp.val != slow.val:                return False            temp = temp.next            slow = slow.next        return True                                    '''        q = []                h = head        while h :            q.append(h.val)            h = h.next        qq = q[:]                qq.reverse()        return q == qq        '''                        """        :type head: ListNode        :rtype: bool        """        


0 0