链表相关总结

本文详细介绍了链表的各种操作,包括删除特定位置的节点、反转链表、两两交换节点、合并排序链表、以及检测环形链表的方法,涉及虚拟头节点、快慢指针、数学技巧和数据结构的巧妙应用。
摘要由CSDN通过智能技术生成

移除链表元素:

       虚拟头节点,cur代表被删元素前的指针,使用tmp记录被删元素,最后要把tmp释放空间

反转链表:

        需要3个指针:pre,cur,tmp

                                pre指前一个,cur指后一个,tmp是cur->next调整前的对象

两两交换链表中的节点:

        虚拟头节点,需要两个tmp指针

        1(cur)->2(tmp1)->3->4(tmp2)

        cur->3, 3->2, 2->4 cur = tmp1

删除链表倒数第N个节点:

        快慢指针, 快指针先走n步,后保持步速一致直到末尾,

        特判删除最后节点,特判删除开头,在释放指针时让tmp->next指向空

链表相交

返回相交的节点。

先统计两个链表长度,对齐后面,然后再以同样速度前进

环形链表

快慢指针,快指针二倍速,慢指针一倍速,两个指针第一次碰,头指针和快指针再碰

数学技巧懂了就没什么了

使用链表模拟加法

同样适用虚拟头节点,再加两个list任意一个时要判断是否为空指针,考虑carry

合并两个排序链表

类似归并排序,最后要记得把

合并K个排序链表        

需用虚拟头节点+小顶堆(优先队列)

k个一组反转链表

使用有结束节点(第k+1个节点)的反转链表函数,3个节点(pre,cur,nxt)

递归得到完整链表

拷贝存在随机指针的链表

数据结构的复制永远考虑:哈希表+二次遍历(第一次遍历复制节点,第二遍节点连接)

先把没有指针(next, random都没设置)的节点创造出来,用map,然后再在遍历的时候链接

检查链表是否有环

快慢指针,撞在一起就有环

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值