19 删除链表的倒数第N个节点

public ListNode removeNthFromEnd(ListNode head, int n) {

这道题 真的史诗级滑铁卢

本以为遇到以前的嫁接题

结果差点被空指针异常坑死

总是报错的是 [1] 1

只有一个节点的 删除倒数第一个

题目所带的测试用例没有[1] 2

如果使用这个测试用例 方法一会报错 方法二不会

方法一

  • 建立哨兵节点 next指向head
  • 建立快慢指针 均与哨兵相等
  • 令快指针先走n+1步
    • 然后快慢指针一起走
    • 快指针指空的时候
    • 慢指针指向倒数第n+1个(即 下一个为要删除的节点) 因为返回倒数第n个是令快指针先走n步 这里不要搞混
  • 令slow的next指向slow的next的next(即 跳过slow的next)
  • 返回哨兵的next
public ListNode removeNthFromEnd(ListNode head, int n) {ListNode sentinel = new ListNode(0);sentinel.next = head;ListNode fast = sentinel;ListNode slow = sentinel;for(int i = 0; i <= n; i++){// 注意这里的等于fast = fast.next;}while(fast != null) {fast = fast.next;slow = slow.next;}slow.next=slow.next.next;return sentinel.next;}

方法二(注释划线部分仍正常运行)

  • 建立count
  • 建立快慢指针 与头节点相等
  • 如果head的next为空 // 空链表
    • head为null
    • 返回head
  • 如果head的next的next为空 // 只有一个节点的链表
    • 如果删除倒数第2个的节点

      • 返回head的next
    • 如果删除倒数第1个的节点
      • 令head的next指向空
      • 返回head
  • 假如 fast的next不为空
    • count++
    • fast后移
    • 如果count<=n
      • continue
    • 如果count>n
      • slow后移一个
  • 如果count<n // 这句才是防止空指针的关键
    • 返回head的next
  • slow的next指向slow的next的next
  • 返回头节点
public ListNode removeNthFromEnd2(ListNode head, int n) {int count = 0;ListNode fast = head;ListNode slow = head;while(fast.next != null) {count++;fast = fast.next;if (count <= n) continue;else slow = slow.next;}if (count < n) return head.next;slow.next = slow.next.next;return head;}

LeetCola_19_删除链表的倒数第N个节点_0723M相关推荐

  1. 刻意练习:LeetCode实战 -- Task11. 删除链表的倒数第N个节点

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  2. 19. 删除链表的倒数第N个节点

    题目 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表 ...

  3. 常考数据结构与算法:删除链表的倒数第n个节点

    题目描述 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1-& ...

  4. python 删除链表中倒数第N个节点

    | 删除链表中倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入: ...

  5. LeetCode第19题;删除链表的倒数第N个节点

    19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2.当删 ...

  6. LeetCode19删除链表的倒数第N个节点20有效的括号

    维护不易,还请点赞支持,微信搜索bigsai 回复进群一起打卡. 19删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1-> ...

  7. 删除链表的倒数第N个节点—leetcode19

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  8. java 链表删除头结点,删除链表的倒数第N个节点,并返回链表的头节点

    面试的时候遇到了一个笔试题,是leetcode的原题,原题的连接: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ ...

  9. LeetCode-19 删除链表的倒数第N个节点

    文章目录 题目描述 我的解法 反思 优化 再次反思 再次优化 总结 Github 题目描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2- ...

  10. 2019-03-18-算法-进化(删除链表的倒数第N个节点)

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1 ...

最新文章

  1. 银行加速“去房地产化”
  2. 安装mysql 环境变量_win10系统安装mysql数据库后配置环境变量的图文教程
  3. 华科网络内容管理系统 v5.6 手机 PC
  4. php外壳函数,php 方法笔记
  5. 如何在Python中表示一个无限数?
  6. leetcode(153)寻找旋转排序数组中的最小值
  7. NetAssist连接报错!
  8. 微软雅黑有版权,UI设计有哪些免费的字体?
  9. 第一章 UCI数据集wine.data主成分分析PCA
  10. 快速搭建自己的人脸识别系统
  11. 小技巧|H5禁止手机虚拟键盘弹出
  12. Android composse 声明式UI,更简单的自定义
  13. 计算机程序设计c++ 9-7:类的抽象描述举例-汽车类及圆类设计
  14. 微博营销和软文营销的价值
  15. rhel7 http实例
  16. 敏捷转型行动笔记:内部敏捷教练实践
  17. PictureMerge
  18. DoTween常用动画效果
  19. 基于MYSQL的论坛管理系统数据库设计项目实战
  20. unicode和中文互转

热门文章

  1. 相分离和长链非编码RNA之间的故事Paraspeckles: Where Long Noncoding RNA Meets Phase Separation
  2. 发短信属于长连接还是短连接_通过链接发送短信
  3. 2021美团笔试题(第十套)个人解答
  4. 基础算法:数的三次方根—浮点二分
  5. 这些月薪过万的公司你准备好了吗
  6. wps居中对齐不在中间_wps有时候居中对齐不是在中间
  7. 5G承载网需求与技术实现
  8. Deecamp考试给我的启发
  9. Linux查看文件大小的命令du的简单介绍
  10. MAYA安装未完成,某些产品无法安装的解决方法