练习题和复用代码提取

链表问题通用方法:
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链表(算法系列)相关推荐

  1. 大数据算法系列——布隆过滤器

    大数据算法系列--布隆过滤器 一.简介 Bloom filter介绍 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集 ...

  2. 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...

    作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...

  3. 查找算法系列之复杂算法:哈希查找

    查找算法系列之复杂算法:哈希查找 眼下为止已经介绍了顺序查找.二分查找.分块查找.二叉排序树.见作者之前的文章: http://blog.csdn.net/u010025211/article/det ...

  4. [算法系列之二十]字典树(Trie)

    一 概述 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计. 二 优点 利用字符串 ...

  5. 导师计划--数据结构和算法系列(上)

    导师计划已经开始一个月了,自己的讲解的课程选择了数据结构和算法.这个系列的讲解分为上下两章,javascript语言辅助.本篇文章为上章,涉及的内容是基本的数据结构.在日本,晚上没事安排@-@,时间还 ...

  6. 导师计划 -- 数据结构和算法系列(上)

    导师计划已经开始一个月了,自己的讲解的课程选择了数据结构和算法.这个系列的讲解分为上下两章,javascript语言辅助.本篇文章为上章,涉及的内容是基本的数据结构.在日本,晚上没事安排@-@,时间还 ...

  7. 白话经典算法系列之七 堆与堆排序

     堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先解说下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是全然二叉树或者是近似全然二叉树. 二叉堆满 ...

  8. 算法系列之二十:计算中国农历(二)

    (接上篇) 所谓的"天文算法",就是利用经典力学定律推导行星运转轨道,对任意时刻的行星位置进行精确计算,从而获得某种天文现象发生时的时间,比如日月合朔这一天文现象就是太阳和月亮的地 ...

  9. leetcode17. 电话号码的字母组合--每天刷一道leetcode算法系列!

    作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...

  10. 【算法系列 二】Stack

    为什么80%的码农都做不了架构师?>>>    栈应用的场景: 1.括号问题 2.后缀表达式 3.深度优先遍历 4.保存现场 1. 给定字符串,仅由"()[]{}" ...

最新文章

  1. golang使用gdb
  2. Leetcode 378. 有序矩阵中第K小的元素 解题思路及C++实现
  3. c语言构造插值多项式,拉格朗日多项式插值(C语言).docx
  4. 七夕节,程序员们都怎么哄女朋友开心?
  5. 制作山寨智能机器人的一些记录 一 * 关于Arduino 以及外围模块的连接及使用...
  6. 【ArcGIS Pro微课1000例】0015:ArcGIS Pro中属性字段分式标注案例教程
  7. 使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控
  8. 如何做科研20171206
  9. bmob php支付,支付服务 - 支付服务RESTful 开发文档 - 《Bmob 文档中心》 - 书栈网 · BookStack...
  10. package 和 install的区别
  11. Python图像处理库PIL的ImageDraw模块之画出四边形
  12. mysql删除员工_MySQL误删数据救命指南:开发人员必收藏
  13. 【动态规划】状压dp:蓝桥2020补给(旅行商问题)
  14. 如何解决macbook开机密码输入正确,却提示“密码错误”无法登陆?
  15. ps写php,PS是什么
  16. oracle数据库如何计算周数,“Oracle”数据库的“周数计算”
  17. bat脚本命令的学习
  18. 我的个人知识管理PKM
  19. Bzoj4484 [Jsoi2015]最小表示
  20. uniapp获取当前页面路由及参数 _@jie

热门文章

  1. 理解signal函数
  2. Android虚拟打电话程序实现
  3. 动画讲解直流无刷电机的原理
  4. 08-图7 公路村村通(浙大数据结构)
  5. 仿58同城的伪静态写法
  6. MySQL 基础知识入门教程
  7. 全景拍摄—地面拍摄教程
  8. Git配置免密登录及常用操作的详细教程(基于Gitee平台)
  9. 卷积神经网络(CNN):乳腺癌识别
  10. CodeWarrior下载及安装