当前位置:网站首页>链表的常见算法总结
链表的常见算法总结
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/
边栏推荐
猜你喜欢
随机推荐
谁说Cat不能做链路跟踪的,给我站出来
Asp.Net Core學習筆記:入門篇
DevOps是什么
【C/C++ 2】Clion配置与运行C语言
业内首发车道级导航背后——详解高精定位技术演进与场景应用
JetCache埋点的骚操作,不服不行啊
面经手册 · 第12篇《面试官,ThreadLocal 你要这么问,我就挂了!》
Asp.Net Core learning notes: Introduction
快快使用ModelArts,零基础小白也能玩转AI!
(1)ASP.NET Core3.1 Ocelot介紹
Technical director, to just graduated programmers a word - do a good job in small things, can achieve great things
自然语言处理之命名实体识别-tanfordcorenlp-NER(一)
不吹不黑,跨平臺框架AspNetCore開發實踐雜談
Basic principle and application of iptables
连肝三个通宵,JVM77道高频面试题详细分析,就这?
從小公司進入大廠,我都做對了哪些事?
你的财务报告该换个高级的套路了——财务分析驾驶舱
PLC模拟量输入和数字量输入是什么
事半功倍:在没有机柜的情况下实现自动化
3分钟读懂Wi-Fi 6于Wi-Fi 5的优势