美文网首页
回文链表

回文链表

作者: CoeusZ | 来源:发表于2019-03-01 18:29 被阅读0次

    题目

    请判断一个链表是否为回文链表。

    示例 1:
    输入: 1->2
    输出: false
    
    示例 2:
    输入: 1->2->2->1
    输出: true
    

    进阶:
    你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

    解题思路

    这个题虽然知道肯定是要反转链表,但是一直不知道怎么在空间复杂度为1的情况下做到,应该说不知道怎么找到中间点,然后看了别人的解题思路才意识到快慢指针的用法。

    快指针每次移动2格,慢指针每次移动一格,当快指针无法移动的时候,慢指针就到了中间点了。

    然后慢指针开始反转链表,完成以后就可以开始遍历了

    每次从慢指针完成后的结点拿出一个元素、从头结点拿出一个元素,如果相等就移动指针,否则返回False

    遍历完成以后,就可以返回True

    答案(一)

    class Solution:
        def isPalindrome(self, head: ListNode) -> bool:
            fast = head
            slow = head
            while fast:
                fast = fast.next.next if fast.next else fast.next
                slow = slow.next
            
            p = None
            c = slow
            while c:
                t = c.next
                c.next = p
                p = c
                c = t
            
            while p:
                if p.val == head.val:
                    p = p.next
                    head = head.next
                else:
                    return False
            
            return True
    

    相关文章

      网友评论

          本文标题:回文链表

          本文链接:https://www.haomeiwen.com/subject/hbrjuqtx.html