当前位置: 首页 > article >正文

234.回文链表

题目:

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:

输入:head = [1,2,2,1]
输出:true

示例 2:

输入:head = [1,2]
输出:false

提示:

  • 链表中节点数目在范围[1, 105] 内
  • 0 <= Node.val <= 9

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

解题思路:

回文链表从前往后和从后往前读到的结果相同,第一种办法是使用数组来存储整个链表的内容,如果正着和反着的数组相同,那么就是回文链表。第二种办法是使用快慢指针来查找当前指针的中间位置,将后半部分的指针进行反转,如果后半部分指针的值和前半部分的指针的值相等就认为是回文链表。指针反转可以参考206的反转链表

代码1:

class Solution:
    def isPalindrome(self, head) -> bool:
        if not head:
            return True
        p = head
        out = []
        while p:
            out.append(p.val)
            p = p.next
        if out!=out[::-1]:
            return False
        return True

时间复杂度:O(n)
空间复杂度:O(n)

代码2:

class Solution:
    def isPalindrome(self, head) -> bool:
        if not head or not head.next :
            return True 
        p = head
        q = head
        while q.next and q.next.next:
            p = p.next
            q = q.next.next
        prev = None
        current = p.next
        while current:
            next = current.next
            current.next = prev
            prev = current
            current = next
        first = head
        second = prev
        while second:
            if first.val!=second.val:
                return False
            first = first.next
            second = second.next
        return True


http://www.kler.cn/a/590930.html

相关文章:

  • 【机器人-基础知识】标定 - IMU(Inertial Measurement Unit, 惯性测量单元)
  • Go语言的负载均衡
  • MyBatis-Plus防全表更新与删除插件BlockAttackInnerInterceptor
  • 微信小程序订阅消息发送消息,点击消息进入小程序页面
  • 4.玩转热图(相关矩阵、缺失值、多维相关、聚类热图、时间序列)——Python数据挖掘代码实践
  • 数据结构概览
  • Python的Pytest(2)
  • vulhub/joker 靶机----练习攻略
  • pycharm-python國際象棋遊戲代碼
  • C语言 论static和extern关键字
  • 透析 HTTP OPTIONS 预检请求
  • 软考中级-数据库-5.4 信息安全与网络安全
  • TCP 通信流程图
  • 使用pyinstaller打包py文件
  • 网络编程套接字【端口号/TCPUDP/网络字节序/socket编程接口/UDPTCP网络实验】
  • [Java微服务架构]1_架构选择
  • RISCV虚拟化环境搭建
  • [快乐学坊management_1] With Cursor | Mysql设计 | 服务接口设计与开发
  • 2、idea里Maven项目如何打成jar或war包
  • 二叉树深度优先搜索:从递归到剪枝六大高频题解析