zoukankan      html  css  js  c++  java
  • 234. 回文链表

    <回文判断><快慢指针-链表中点>

    题目

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

    示例 1:

    输入: 1->2
    输出: false

    示例 2:

    输入: 1->2->2->1
    输出: true
    

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

    我的思路

     (复杂度奇高。。。)

    1.判断回文字符串如何处理长度的一半问题?

    for i in range(len(s)//2):
        if s[i] != s[len(s)-i-1]:
            print("false")
    不用奇偶判断

    奇数的时候,终点刚好落到中间的位置

    偶数的时候,终点在中间靠右,首尾的指针到最后应该是这样: start | end  -> end | start。相当于多判断了一次中间的两个数。。

    2.更好的回文判断:s=s[::-1]

    class Solution(object):
        def isPalindrome(self, head):
            """
                    1.把链表存到数组
                    2.按照普通方式判回文
            """
            node = head
            tmp =[]
            while node:
                tmp.append(node.val)
                node= node.next
            if len(tmp)==1:return True
            div = int(len(tmp)/2)
                    '''
                    这里分为奇数数组的折中 和 偶数数组的折中
                    是否能优化???
                    '''
            if len(tmp)%2:
                left = div+1
                right = div-1
            else:
                left = div
                right=div-1
            if tmp[:left]==tmp[-1:right:-1]:
                return True
            else:
                return False

    题解

    总结

    1.用快慢指针来找链表中点

    先定义快指针每次走2步,满指针每次走1步。

    想象一个长度为10的链表,快指针走了5步到达终点(None节点)

    满指针当然也走了5步,一步一步走刚好走到中点。

  • 相关阅读:
    PAT 1088. Rational Arithmetic
    PAT 1087. All Roads Lead to Rome
    PAT 1086. Tree Traversals Again
    PAT 1085. Perfect Sequence
    PAT 1084. Broken Keyboard
    PAT 1083. List Grades
    PAT 1082. Read Number in Chinese
    求最大公因数
    [转载]Latex文件转成pdf后的字体嵌入问题的解决
    [转载]Matlab有用的小工具小技巧
  • 原文地址:https://www.cnblogs.com/remly/p/11454661.html
Copyright © 2011-2022 走看看