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

力扣刷题(第五十八天)

灵感来源 

- 保持更新,努力学习

- python脚本学习

回文链表

解题思路

  1. 使用快慢指针找到链表的中间节点。
  2. 反转链表的后半部分。
  3. 比较前半部分和反转后的后半部分是否相同。
  4. (可选)恢复链表的原始结构。
    class Solution:def isPalindrome(self, head: ListNode) -> bool:if not head or not head.next:return True# 使用快慢指针找到中间节点slow, fast = head, headwhile fast.next and fast.next.next:slow = slow.nextfast = fast.next.next# 反转后半部分链表second_half = self.reverseList(slow.next)# 比较前半部分和反转后的后半部分first_ptr = headsecond_ptr = second_halfresult = Truewhile result and second_ptr:if first_ptr.val != second_ptr.val:result = Falsefirst_ptr = first_ptr.nextsecond_ptr = second_ptr.next# 恢复链表(可选)slow.next = self.reverseList(second_half)return resultdef reverseList(self, head: ListNode) -> ListNode:prev = Nonecurr = headwhile curr:next_node = curr.next  # 保存下一个节点curr.next = prev       # 反转指针prev = curr            # 移动prev指针curr = next_node       # 移动curr指针return prev

逐行解释

class Solution:def isPalindrome(self, head: ListNode) -> bool:# 处理边界情况:空链表或只有一个节点的链表是回文if not head or not head.next:return True# 步骤1:使用快慢指针找到链表的中间节点slow, fast = head, headwhile fast.next and fast.next.next:slow = slow.next      # 慢指针每次移动一步fast = fast.next.next # 快指针每次移动两步# 此时slow指针位于中间节点(奇数长度)或前半部分的最后一个节点(偶数长度)# 例如:1->2->3->2->1,slow指向3;1->2->2->1,slow指向第一个2# 步骤2:反转后半部分链表second_half = self.reverseList(slow.next)# 步骤3:比较前半部分和反转后的后半部分first_ptr = head         # 前半部分的起始指针second_ptr = second_half # 后半部分的起始指针(已反转)result = True            # 标记是否为回文while result and second_ptr:if first_ptr.val != second_ptr.val:result = Falsefirst_ptr = first_ptr.nextsecond_ptr = second_ptr.next# 步骤4:恢复链表(可选,题目不要求,但实际应用中可能需要保持链表原始结构)slow.next = self.reverseList(second_half)return resultdef reverseList(self, head: ListNode) -> ListNode:# 反转链表的辅助函数prev = Nonecurr = headwhile curr:next_node = curr.next  # 保存下一个节点curr.next = prev       # 当前节点指向前驱节点prev = curr            # 前驱节点后移curr = next_node       # 当前节点后移return prev  # 返回新的头节点

相关文章:

  • 【测开面试题】八股文总结
  • Kafka 可靠性保障:消息确认与事务机制(二)
  • 路由器端口映射怎么设置?本地固定内网IP给外面网络连接访问
  • MongoDB文档查询:从基础到进阶的探索之旅
  • Flask蓝图
  • AI 社交和AI情绪价值的思考 -延申思考2 -全局记忆
  • LLMs:《WebDancer: Towards Autonomous Information Seeking Agency》翻译与解读
  • PC16550 UART接收中断处理完整示例代码
  • 自定义Spring Boot Starter开发指南
  • python 将字典的值替换为键名作为变量名的形式(带缩进)
  • SCADA|KingSCADA4.0中历史趋势控件与之前版本的差异
  • 基于n8n快速开发股票舆情监控对话系统
  • Thinkless:基于RL让LLM自适应选择长/短推理模式,显著提升推理效率和准确性!!
  • 什么是java jdk?
  • LeetCode 第78题:子集
  • 基于Python爬虫的房价可视化
  • 统信UOS 操作系统源码制作openssh 10.0p2 rpm包——筑梦之路
  • springboot速通
  • 如何用ai设计测试
  • 多线程并发编程硬核指南:从互斥锁到生产者模型的全场景实战与原理揭秘
  • 网站开发助理主要工作/建站合肥网络公司seo
  • 天天seo伪原创工具/百度关键词优化排名技巧
  • 网站服务器和vps做一台/营销qq
  • 怎样建设网站卖农产品/引流推广效果好的app
  • 做淘宝客网站域名是别人的/浙江seo博客
  • 温州快速排名优化/百度小程序优化排名