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

000 链表总结

链表的问题建议使用虚拟头结点,就直接默认全部使用了,因为更加方便(注意返回链表头结点时不要忘了返回的不是虚拟头结点,而是他的next)

链表不管是插入还是删除结点,都要找到对应位置的前驱结点进行操作,一般新建的cur指针都是指向虚拟头结点,为了统一写法建议都直接指向虚拟头结点(要改某个节点,必须找到它的前一个节点如果 cur 从 dummy 开始:你永远能停在目标节点的前面,直接操作,next就不行,而且指向虚拟头结点更加安全)

  1. 移除链表元素:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点

    • 注意cur = cur->next的移动条件,不要丢掉结点

    • 记住虚拟头结点的创建方式,后面只能用delete 删除指定结点

         dummyHead->next = head;ListNode* cur = dummyHead;
      
    • 最后记得删除虚拟头结点,避免内存泄露,返回真正的头结点

  2. 设计链表:(就是实现链表的各种操作,由于内容较多,具体去看对应笔记)

    • 标准且完整的构造函数:
    ListNode() : val(0), next(nullptr) {}                  // 无参
    ListNode(int x) : val(x), next(nullptr) {}             // 一个参数
    ListNode(int x, ListNode *next) : val(x), next(next) {}// 两个参数
    
  3. 反转链表

    • 主要有三种方法:新建一个链表(浪费内存)、双指针法、递归法
    • 边界复杂时举个例子模拟一下过程就好了,这里双指针解法主要就是一个先保存cur的下一个结点的位置(tmp),cur指向pre,更新pre(pre=cur),然后再更新cur(cur = tmp,原来cur的下一个位置)
  4. 两两交换链表中的结点

    这个口述也很麻烦,只能自己画图理解过程

  5. 删除链表中倒数第N个结点(一趟扫描,不知道链表长度,用双指针最快)

    • 双指针思路:让fast和slow都指向虚拟头结点,让fast先走N步时,fast指向NULL时slow就指向倒数第N个结点
  6. 链表相交(本题只需要注意相交必尾公共)

    • 先让长链表先走长的步数(尾巴对齐了),然后一起走,第一个相同的点即为交点
  7. 环形链表(本题目数学证明十分复杂,记住就可以了)

    • 如何判断链表有环呢?

      一个快指针,一个慢指针,如果没有环时快慢指针永远不可能相遇

      快指针每次走两步,慢指针每次走一步,快指针相对于慢指针每次走一步,所以肯定能遇到,不可能在环中一直循环下去

    • 环的入口如何寻找?

      在快慢指针的相遇点,此时从头结点出发一个指针,另外一个指针从相遇点开始走,两个指针同步移动1步,他们两个的最终相遇点即为环的入口

http://www.jsqmd.com/news/751762/

相关文章:

  • 3分钟免费汉化Axure RP:告别英文界面的终极指南
  • 别再手动勾选了!用Vue3+Element Plus的el-select封装一个带全选/反选/清空的通用组件
  • 前后端鉴权方案
  • Neo 构建鸿蒙应用【三】:实战社交应用与工程感悟
  • 如何轻松解决微信QQ音频格式转换难题:Silk v3解码器实用指南
  • GPTs系统提示词项目解析:从原理到实战的提示词工程指南
  • 即插即用系列 | CVPR 2026 | WDAM:小波域注意力创新!高频引导低频增强,结构纹理双保真,复杂退化场景精准定位! | 代码分享
  • Cursor AI编程助手规则配置指南:提升代码一致性与开发效率
  • 如何在5分钟内掌握F3D:一款让你工作效率翻倍的3D模型查看神器
  • AI提示词仓库:提升开发者与AI编程助手协作效率的实战指南
  • Monolito-V2:本地化AI智能体编排运行时,实现数据私有与多智能体协作
  • Unity开发者效率翻倍:用Odin插件5分钟搞定自定义Inspector(附常用Attribute速查表)
  • ThinkPHP5.1 模板解析错误 Tag not closed 报错如何处理?
  • 避坑指南:Altium Designer四层板规则设置详解,让你的STM32核心板一次打样成功
  • 3分钟掌握百度网盘直链解析技术:告别限速困扰
  • 政安晨【OpenClaw与Hermes指南】AI Coding Agent行为约束之道:Karpathy CLAUDE.md技能体系深度解读
  • [vscode]修改环境变量,更新包之后,vscode不生效解决
  • DiT与PBR结合的图像反射去除技术解析
  • 从文件上传到API输出:一个完整ABAP JSON处理流程实战(含GUI_UPLOAD和字段映射)
  • 终极ASMR下载指南:三步打造你的私人放松音频库
  • python: linux服务器上weasyprint生成pdf时中文变乱码
  • Taotoken 用量看板如何帮助个人开发者清晰掌握月度支出
  • AutoHotkey V2扩展库:从脚本自动化到企业级开发的架构演进
  • 基于LangChain与Discord.py构建多智能体协作机器人实战指南
  • 终极Zotero文献管理指南:如何用Format Metadata插件3倍提升学术效率
  • 从FHIR R4到2026正式版:C#医疗系统适配的3个隐藏陷阱、2个必改NuGet包、1套自动化合规检测脚本
  • .NET 9边缘配置稀缺资源包泄露:包含17个经FIPS 140-3认证的加密配置片段、6套离线签名策略及自动轮转证书生成器(限前500名开发者)
  • 【c++】set和map的封装
  • 2026 廊坊专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月廊坊最新深度调研方案) - 防水百科
  • Python-统计某英文字母的个数统计单词出现的次数