• Palindrome Linked List 解答


    Question

    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?

    Solution

    这一题思路并不难。要满足follow-up的要求,我们用到了快慢指针。

    1. 用快慢指针得到前后两半list,这里有个技巧是quick先判断有无next,slow再走。这样就保证slow永远指向后半部分的前一个结点

    2. Reverse 后半部分的list。三指针方法

    3. 比较前半链表和反转后的后半链表

    思路虽不难,但是要做到bug-free还是有难度。关键在于对以上每个子问题都熟悉。

     1 # Definition for singly-linked list.
     2 # class ListNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.next = None
     6 
     7 class Solution(object):
     8     def isPalindrome(self, head):
     9         """
    10         :type head: ListNode
    11         :rtype: bool
    12         """
    13         if head is None or head.next is None:
    14             return True
    15         slow = head
    16         quick = head
    17         while quick.next is not None:
    18             quick = quick.next
    19             if quick.next is not None:
    20                 quick = quick.next
    21                 slow = slow.next
    22         # Reverse sub list between slow.next and quick
    23         cur = slow.next
    24         slow.next = None
    25         then = cur.next
    26         cur.next = None
    27         while then is not None:
    28             tmp = then.next
    29             then.next = cur
    30             cur = then
    31             then = tmp
    32         second_head = cur
    33         # Compare first sub list and second sub list
    34         cur1 = head
    35         cur2 = second_head
    36         while cur1 is not None and cur2 is not None:
    37             if cur1.val != cur2.val:
    38                 return False
    39             cur1 = cur1.next
    40             cur2 = cur2.next
    41         return True
  • 相关阅读:
    [NOTE]常用Linux命令总结[Thx for commandlinefu]
    [原]隧道Proxy原理详解(基于Node.js)
    [转]MySQL索引详解(1)
    [QA]服务端进程模型
    [转]MySQL索引详解(2)
    非动态规划实现LCS算法
    Java里线程安全的有界容器的实现
    maven历史版本下载
    JDK9下载
    maven排除依赖和添加本地依赖
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4932061.html
Copyright © 2020-2023  润新知