• 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步,一步一步走刚好走到中点。

  • 相关阅读:
    习惯的本质:逐步建立新的常态
    如何度过有用的每一天
    如何利用晚上八点到十点这段时间自我提升
    为什么很多年轻人总会感到迷茫
    当你学会专注,人生才算真正成熟
    如何过上简单的生活
    游标
    触发器

    函数
  • 原文地址:https://www.cnblogs.com/remly/p/11454661.html
Copyright © 2020-2023  润新知