首页 > 其他分享 >刷题总结——链表

刷题总结——链表

时间:2024-10-25 12:21:22浏览次数:1  
标签:总结 dummy p0 反转 next 链表 节点 刷题

总论

  • 链表提供快速的前后访问和插入,不提供随机访问,要是需要随机访问需要结合hash实现
  • 链表反转类问题的关键是3个节点prev curr next之间的关系:
    • 由于反转的时候next会被改变,因此需要临时存储设置next的tmp = cur->next; 之后可以反转,再更新prev和curr即可
  • dummy node的引入,是为了简化与头节点有关的操作,由于头节点可能发生变化,通过dummy获得返回值方便
  • 链表删除问题不一定要真正的删除,只需要其不出现在原来的链上即可

链表反转

  • 头插法
  • 反转k个
    • 需要注意的是插入dummy节点,用来构成p0
    • 核心的链接逻辑
      p0->next->next = cur; // reversed k-list tail
      p0->next = pre; // reversed k-list head
  • k个一组反转
    • 需要注意先求出需要多少个k组反转(链表总长度)
    • 理解p0的含义,p0是每组开始前的pre记录,不会随着pre更新,但是每组结束之后需要更新一下
    • 因此需要在每次k个翻转结束之后,进行p0更新,开始之前记录下一个p0的位置

链表快慢指针

寻找节点

  • 找中间节点,同时出发,按照速度1:2移动
  • 环形链表找入口:Floyd算法,按照速度1:2移动,快慢必会相遇,之后调节其中一个至起始点,按照速度1:1移动
  • 链表重排,快慢链表找中点+反转链表

删除节点

  • 删除第n个
  • 删除倒数第n(快慢)
  • 去除重复元素(快慢)

MISC

  • 2个链表交点问题:方法1: 前后相接/方法2: 先求各自长度之后移动
  • LRU问题:设计双向链表+哈希表索引key到链表地址,注意双向链表初始化的方式
    • 使用dummy node的prev来保证LRU删除的最后一个节点
  • 实现hash存储:使用拉链法解决hash冲突
  • 链表归并排序:使用堆辅助实现
  • 两两交换链表节点:注意交换的方法,下一次交换开始前要设置好prev的位置,不妨多用几个临时变量来表示中间值
    • 加一个默认的dummy节点,返回dummy->next

参考资料

  1. 灵神题单:https://leetcode.cn/circle/discuss/K0n2gO/

标签:总结,dummy,p0,反转,next,链表,节点,刷题
From: https://www.cnblogs.com/hesun/p/18502251

相关文章

  • 10.12日总结
    今天上午睡觉,下午学javaJava今日总结一.数据库初步了解1.数据库,像仓库一样存储数据,同时也提供了对数据查询修改删除等功能。2.对于关系型数据库(还有非关系型数据库,很少用到)而言,会将类似的数据存储在一张表中,如雇员表。每个表也包含了各个条目,如雇员的id、名字等,每个条目叫做表......
  • Keepalived+Mysql实现高可用配置总结
    通过本文,大家将学习到以下相关知识内容:1、什么是高可用服务2、Keepalived简介3、Keepalived常见应用场景4、Keepalived高可用故障切换原理介绍5、VRRP协议介绍6、配置实现Keepalived监控Mysql7、Keepalived配置文件介绍8、Keepalived常见问题列举一、什么是高可用服务......
  • 程序员修炼之道总结2
    第五节:你的知识资产核心理念:持续投资于知识是程序员保持竞争力的关键,管理和更新知识资产能带来更高的职业回报。启发:定期学习新知识和技能,不仅能提高个人能力,还能适应快速变化的技术环境,增强职业稳定性。第六节:交流核心理念:有效的沟通需要清晰表达和适应听众,理解不同交流方式......
  • 关于C语言指针类型的总结
    前言我个人将目前在C语言中所遇到的指针归类为8种,至于为何写第九点,是因为我个人认为第九点极容易与第五点混淆,故总结如下:1.普通指针普通指针即最常见的如:int*、char*等甚至于也可将一个数组如arr[5]的数组名arr看作是指针类型(因为指针本质上就是地址,而arr是该数......
  • [项目][boost搜索引擎#4] cpp-httplib使用 | log.hpp | 前端 | 测试及总结
    目录编写http_server模块1.引入cpp-httplib到项目中2.cpp-httplib的使用介绍3.正式编写http_server九、添加日志到项目中十、编写前端模块十一.详解传gitee十二、项目总结项目的扩展写在前面项目gitee已经上传啦(还是决定将学校和个人的gitee区分开来,所以......
  • 10.11日总结
    上午练习了排球,下午上了马原课晚上学习了javaJava收获一.新项目的名字新项目的名字规范命名取为该项目英文名称的首字母。如学生信息管理系统,英文名为Studentsselectcoursesystem,即取名为sscs。二.构建项目框架(设计数据库)如学生选课管理系统,在做系统前需要进行初步设计,有......
  • 10.24每日总结:程序员修炼之道读后感1
    首次读《程序员修炼之道:从小工到专家》,我深受启发。这本书犹如一盏明灯,为程序员的成长之路指明了方向。在书中,作者强调了许多重要的理念和实践方法。其中,对我触动最深的是关于代码质量的重视。优秀的程序员不仅要追求代码的功能性,更要注重代码的可读性、可维护性和可扩展性。正如......
  • 考试总结 2024Oct-Nov
    考试总结2024Oct-Nov前言:太懒了,不想每次都单独写。\(\def\EZ{\textcolor{#51af44}{\text{EZ}}}\EZ\)表示简单,10分钟内就能想到。\(\def\HD{\textcolor{#3173b3}{\text{HD}}}\HD\)表示中等,能独立想出\(\def\IN{\textcolor{#be2d23}{\text{IN}}}\IN\)表示困难,独立思考能想......
  • openfeign使用中不能加@RequestMapping和@Async失效的情况总结
    1.openfeign使用中不能加@RequestMapping当在openfeign实现远程调用的时候,添加上了@RequestMapping注解,导致服务无法启动。控制台报错消息如下主要会产生三种问题:·与消费方服务原有接口产生冲突·多个协议包中的RPC接口冲突·使网关路由失效如图:原因:扫描到的FeignCli......
  • 多项式求和【链表】
    题面给定两个多项式,用链表表示,实现多项式的加法运算。链表中的每个节点包含两个属性:系数和指数。例如,多项式\(3x^3+4x^2+5x+6\)可表示为链表[(3,3),(4,2),(5,1),(6,0)]。输入格式:第一行:第一个多项式的项数n接下来的n行:每行两个整数,分别代表系数和指数,描述第一个多项式的......