本文主要是介绍【VIP】【链表翻转】234. Palindrome Linked List【E】【94】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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 Trueh = head fast = headslow = headprv = Nonetemp = Nonewhile fast and fast.next:fast = fast.next.nexttemp = slow.nextslow.next = prvprv = slowslow = tempslow = prvif fast:temp = temp.next'''while temp:print temp.valtemp = temp.nextprint '----'while slow:print slow.valslow = slow.next'''while temp and slow:#print temp.valif temp.val != slow.val:return Falsetemp = temp.nextslow = slow.nextreturn True'''q = []h = headwhile h :q.append(h.val)h = h.nextqq = q[:]qq.reverse()return q == qq'''""":type head: ListNode:rtype: bool"""
这篇关于【VIP】【链表翻转】234. Palindrome Linked List【E】【94】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!