LC链表(算法系列)
练习题和复用代码提取
链表问题通用方法:
1.遍历结束条件:p=null || p.next=null
2.遍历的初始值:p=head
3.核心逻辑:
4.特殊情况处理(头节点,尾节点,空链表,考虑是否使用虚拟头节点)
链表中参数理解:
“=”:可以理解为指向
左侧表示被赋值的变量;右侧表示取的值
203. 移除链表元素
1.遍历结束条件:prev.next=null
2.遍历的初始条件:prev=head
3.遍历的核心逻辑:
if(prev.next.val==val)prev.next=prev.next.next;
else prev=prev.next;
4.这里可以采用虚拟头节点核心逻辑就通用;若不采用可以只对头部特殊处理判断以下
//添加虚拟头节点
ListNode newHead=new ListNode();
newHead.next=head; //图中注释1
ListNode prev=newHead; //图中注释2
while(prev.next!=null){}
return newHead.next; //图中注释3
876. 链表的中间结点
使用快慢双指针,slow走一步,fast走两步
//注意结束条件,因为题目要求偶数个链表时,返回后面那个
//通过举例[1,2,3,4,5,6],输出返回4
while(fast!=null && fast.next!=null){slow=slow.next;fast=fast.next=fast;
}
83. 删除排序链表中的重复元素
以下为链表遍历后的通用模板
ListNode newHead = new ListNode(-111, null);//创建题目值范围外的虚拟头节点
ListNode tail = newHead; //属于优化处理,在尾部加一个tail指针,方便插入
ListNode p = head; //使用p来遍历链表,防止遍历原head链表导致代码模糊
while (p != null) {ListNode tmp = p.next; //先临时记录p.next,防止中间被修改掉,可以和p=tmp处代码结合,相当于p=p.nextif (p.val != tail.val) {//尾部tail指针,尾部插入p链表tail.next = p; //尾部插入三部曲tail = p;p.next = null;}p = tmp;
}
return newHead.next;
剑指 Offer 25. 合并两个排序的链表
跳过
2. 两数相加
链表尾部的null修改值
tail.next=new ListNode(carry) //表示进位为1,就将null搞为进位的1
206. 反转链表
遍历链表时维护一个向前指向的指针
while(p!=null){ListNode tmp=p.next; //tmp指向p.next节点,并且可以记录临时的值防止p.next被修改后值变化p.next=prev; //重点,这里维护一个指向前序的指针prev=p;p=tmp;
}
234. 回文链表
获取中间节点+翻转
328. 奇偶链表
跳过
25. K 个一组翻转链表
跳过
剑指 Offer 22. 链表中倒数第k个节点
快慢指针,fast先走k步
19. 删除链表的倒数第 N 个结点
跳过
160. 相交链表
遍历完一个链表继续遍历另一个,可以消除长度差
141. 环形链表
龟兔赛跑,一个跑的快一个跑的慢,在环中总归相遇
LC链表(算法系列)相关推荐
- 大数据算法系列——布隆过滤器
大数据算法系列--布隆过滤器 一.简介 Bloom filter介绍 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集 ...
- 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...
作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...
- 查找算法系列之复杂算法:哈希查找
查找算法系列之复杂算法:哈希查找 眼下为止已经介绍了顺序查找.二分查找.分块查找.二叉排序树.见作者之前的文章: http://blog.csdn.net/u010025211/article/det ...
- [算法系列之二十]字典树(Trie)
一 概述 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计. 二 优点 利用字符串 ...
- 导师计划--数据结构和算法系列(上)
导师计划已经开始一个月了,自己的讲解的课程选择了数据结构和算法.这个系列的讲解分为上下两章,javascript语言辅助.本篇文章为上章,涉及的内容是基本的数据结构.在日本,晚上没事安排@-@,时间还 ...
- 导师计划 -- 数据结构和算法系列(上)
导师计划已经开始一个月了,自己的讲解的课程选择了数据结构和算法.这个系列的讲解分为上下两章,javascript语言辅助.本篇文章为上章,涉及的内容是基本的数据结构.在日本,晚上没事安排@-@,时间还 ...
- 白话经典算法系列之七 堆与堆排序
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先解说下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是全然二叉树或者是近似全然二叉树. 二叉堆满 ...
- 算法系列之二十:计算中国农历(二)
(接上篇) 所谓的"天文算法",就是利用经典力学定律推导行星运转轨道,对任意时刻的行星位置进行精确计算,从而获得某种天文现象发生时的时间,比如日月合朔这一天文现象就是太阳和月亮的地 ...
- leetcode17. 电话号码的字母组合--每天刷一道leetcode算法系列!
作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...
- 【算法系列 二】Stack
为什么80%的码农都做不了架构师?>>> 栈应用的场景: 1.括号问题 2.后缀表达式 3.深度优先遍历 4.保存现场 1. 给定字符串,仅由"()[]{}" ...
最新文章
- golang使用gdb
- Leetcode 378. 有序矩阵中第K小的元素 解题思路及C++实现
- c语言构造插值多项式,拉格朗日多项式插值(C语言).docx
- 七夕节,程序员们都怎么哄女朋友开心?
- 制作山寨智能机器人的一些记录 一 * 关于Arduino 以及外围模块的连接及使用...
- 【ArcGIS Pro微课1000例】0015:ArcGIS Pro中属性字段分式标注案例教程
- 使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控
- 如何做科研20171206
- bmob php支付,支付服务 - 支付服务RESTful 开发文档 - 《Bmob 文档中心》 - 书栈网 · BookStack...
- package 和 install的区别
- Python图像处理库PIL的ImageDraw模块之画出四边形
- mysql删除员工_MySQL误删数据救命指南:开发人员必收藏
- 【动态规划】状压dp:蓝桥2020补给(旅行商问题)
- 如何解决macbook开机密码输入正确,却提示“密码错误”无法登陆?
- ps写php,PS是什么
- oracle数据库如何计算周数,“Oracle”数据库的“周数计算”
- bat脚本命令的学习
- 我的个人知识管理PKM
- Bzoj4484 [Jsoi2015]最小表示
- uniapp获取当前页面路由及参数 _@jie