当前位置:网站首页>链表的常见算法总结
链表的常见算法总结
2020-11-06 01:18:00 【ClawHub的博客】
1、两个单链表求和
445. 两数相加 II
双栈法更好理解。
1 |
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { |
将两个链表构造两个栈,使用栈先进后出的特性,做两个链表倒叙做计算,注意进位的情况。
2、单链表非递归翻转,不借助其他数据结构
206. 反转链表
单链表的翻转就是将相邻两个节点的指针翻转。需要借助两个额外的指针用来存储当前节点的前后节点。
1 |
public static ListNode reverseList(ListNode head) { |
3、回文链表(用 O(n) 时间复杂度和 O(1) 空间复杂度)
234. 回文链表
通过快慢指针获取链表中间节点位置,将后半段链表反转,之后迭代前后链表,判断值是否相同。
1 |
public static boolean isPalindrome(ListNode head) { |
4、环形链表
141. 环形链表
检测链表中是否有环,可以使用两种方法:使用HashSet或者快慢指针。
1 |
public static boolean hasCycle(ListNode head) { |
5、删除链表种所有值为val的节点
203. 移除链表元素
链表移除操作要借助一个哨兵节点,简化删除。
1 |
public static ListNode removeElements(ListNode head, int val) { |
6、合并两个有序链表
21. 合并两个有序链表
需要使用哨兵节点。
1 |
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) { |
总结
链表常用的算法经常会借助快慢指针和哨兵节点。只要用到哨兵节点head就会有pre节点相配合。
版权声明
本文为[ClawHub的博客]所创,转载请带上原文链接,感谢
https://clawhub.club/posts/2020/01/06/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/%E9%93%BE%E8%A1%A8%E7%9A%84%E5%B8%B8%E8%A7%81%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93/
边栏推荐
- 高级 Vue 组件模式 (3)
- mac 安装hanlp,以及win下安装与使用
- 什么是无副作用的函数方法?如何取名? - Mario
- In depth understanding of the construction of Intelligent Recommendation System
- hadoop 命令总结
- 6.7 theme resolver theme style parser (in-depth analysis of SSM and project practice)
- keras model.compile损失函数与优化器
- 6.8 multipartresolver file upload parser (in-depth analysis of SSM and project practice)
- 從小公司進入大廠,我都做對了哪些事?
- Microservices: how to solve the problem of link tracing
猜你喜欢
随机推荐
嘘!异步事件这样用真的好么?
什么是无副作用的函数方法?如何取名? - Mario
用Python构建和可视化决策树
微服務 - 如何解決鏈路追蹤問題
Serilog原始碼解析——使用方法
如何使用ES6中的参数
C language 100 question set 004 - statistics of the number of people of all ages
Pycharm快捷键 自定义功能形式
PPT画成这样,述职答辩还能过吗?
企业数据库的选择通常由系统架构师主导决策 - thenewstack
Dapr實現分散式有狀態服務的細節
GUI 引擎评价指标
小白量化投资交易入门课(python入门金融分析)
免费的专利下载教程(知网、espacenet强强联合)
分布式ID生成服务,真的有必要搞一个
Asp.Net Core學習筆記:入門篇
10 easy to use automated testing tools
Cocos Creator 原始碼解讀:引擎啟動與主迴圈
Gradient understanding decline
Vue.js移动端左滑删除组件