Leetcode算法Java全解答–19. 删除链表的倒数第N个节点

文章目录

  • Leetcode算法Java全解答--19. 删除链表的倒数第N个节点
    • 题目
    • 想法
    • 结果
    • 总结
    • 代码
      • 我的答案
      • 大佬们的答案
      • 测试用例
    • 其他

题目

给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。

说明:
给定的 n 保证是有效的。

进阶:
你能尝试使用一趟扫描实现吗?

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.

想法

  1. 空间换时间的做法

用一个长度为n+1的数组接收节点

不过需要实时更新数组,有点复杂

时间复杂度为n,空间复杂度为n
2. 遍历2次法

先循环一次,算出长度,不过扫描了2次,

不符合题目

复杂度n/1

  1. 双指针法

搞2个指针,让AB指针中间间隔为n+1,这样A到末尾的时候,B的下一个节点刚好就是要删掉的东西

复杂度n/1

结果

超过99%的测试案例

时间复杂度:n

空间复杂度:1

总结

遇到链表没有第一时间想到双指针

空间换时间,虽然可以做出来,但是很操蛋

代码

我的答案

   /** Copyright (C), 2015-2018* FileName: Solution019* Author:   zhao* Date:     2018/11/19 21:11* Description: 19. 删除链表的倒数第N个节点* History:* <author>          <time>          <version>          <desc>* 作者姓名           修改时间           版本号              描述*/
package com.lizhaoblog.mid;import com.lizhaoblog.diynode.ListNode;/*** 〈一句话功能简述〉<br>* 〈19. 删除链表的倒数第N个节点〉** @author zhao* @date 2018/11/19 21:11* @since 1.0.1*/
public class Solution019 {/*************************************** 题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?**************************************//**************************************** 想法:*          1. 空间换时间的做法*              用一个长度为n+1的数组接收节点*              不过需要实时更新数组,有点复杂*              时间复杂度为n,空间复杂度为n*          2. 遍历2次法*              先循环一次,算出长度,不过扫描了2次,不符合题目*          3. 双指针法*              搞2个指针,让AB指针中间间隔为n+1,这样A到末尾的时候,B的下一个节点刚好就是要删掉的东西** 我的做法*      超过99%的测试案例*      时间复杂度:n*      空间复杂度:1* 代码执行过程:** 总结:*      遇到链表没有第一时间想到双指针*      空间换时间,虽然可以做出来,但是很操蛋** ***********************************/public ListNode removeNthFromEnd(ListNode head, int n) {if (head == null || n == 0) {return head;}ListNode ANode = head;ListNode BNode = head;for (int i = 0; i < n; i++) {ANode = ANode.next;}while (ANode == null) {ANode = ANode.next;BNode = BNode.next;}if (n == 1) {BNode.next = null;} else {BNode.next = BNode.next.next;}return head;}/*************************************** 比我好的答案 better* ***********************************/public void better() {}}

大佬们的答案

/*************************************** 比我好的答案 better* ***********************************/
public ListNode better(ListNode head, int n) {ListNode dummy = new ListNode(0);dummy.next = head;int length = 0;ListNode first = head;while (first != null) {length++;first = first.next;}length -= n;first = dummy;while (length > 0) {length--;first = first.next;}first.next = first.next.next;return dummy.next;
}

测试用例

@Test
public void test019() {// 创建测试案例ListNode listNode1 = new ListNode(1);ListNode listNode2 = new ListNode(2);ListNode listNode3 = new ListNode(3);ListNode listNode4 = new ListNode(4);ListNode listNode5 = new ListNode(5);listNode1.next = listNode2;listNode2.next = listNode3;listNode3.next = listNode4;listNode4.next = listNode5;int n1 = 2;// 测试案例期望值ListNode expResult1 = new ListNode(1);ListNode expResult12 = new ListNode(2);ListNode expResult13 = new ListNode(3);ListNode expResult15 = new ListNode(5);expResult1.next = expResult12;expResult12.next = expResult13;expResult13.next = expResult15;// 执行方法Solution019 solution019 = new Solution019();ListNode result1 = solution019.removeNthFromEnd(listNode1, n1);// 判断期望值与实际值Assert.assertEquals(expResult1.toArray(), result1.toArray());
}

其他

代码托管码云地址:https://gitee.com/lizhaoandroid/LeetCodeAll.git

查看其他内容可以点击专栏或者我的博客哈:https://blog.csdn.net/cmqwan

“大佬们的答案” 标签来自leetcode,侵权请联系我进行删改

如有疑问请联系,联系方式:QQ3060507060

Leetcode算法Java全解答--19. 删除链表的倒数第N个节点相关推荐

  1. Leetcode算法Java全解答--37. 解数独

    Leetcode算法Java全解答–37. 解数独 文章目录 Leetcode算法Java全解答--37. 解数独 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 编写一个 ...

  2. Leetcode算法Java全解答--12. 整数转罗马数字

    Leetcode算法Java全解答–12. 整数转罗马数字 文章目录 Leetcode算法Java全解答--12. 整数转罗马数字 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 ...

  3. Leetcode算法Java全解答--17. 电话号码的字母组合

    Leetcode算法Java全解答–17. 电话号码的字母组合 文章目录 Leetcode算法Java全解答--17. 电话号码的字母组合 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用 ...

  4. Leetcode算法Java全解答--41. 缺失的第一个正数

    Leetcode算法Java全解答–41. 缺失的第一个正数 文章目录 Leetcode算法Java全解答--41. 缺失的第一个正数 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 ...

  5. Leetcode算法Java全解答--75. 颜色分类

    Leetcode算法Java全解答–75. 颜色分类 文章目录 Leetcode算法Java全解答--75. 颜色分类 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...

  6. Leetcode算法Java全解答--60. 第k个排列

    Leetcode算法Java全解答–60. 第k个排列 文章目录 Leetcode算法Java全解答--60. 第k个排列 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 ...

  7. Leetcode算法Java全解答--73. 矩阵置零

    Leetcode算法Java全解答–73. 矩阵置零 文章目录 Leetcode算法Java全解答--73. 矩阵置零 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...

  8. Leetcode算法Java全解答--16. 最接近的三数之和

    Leetcode算法Java全解答–16. 最接近的三数之和 文章目录 Leetcode算法Java全解答--16. 最接近的三数之和 题目 想法 结果 总结 代码 我的答案 暴力破解 滑动列表 大佬 ...

  9. [链表|多解法] leetcode 19 删除链表的倒数第N个节点

    [链表|多解法] leetcode 19 删除链表的倒数第N个节点 1.题目 题目链接 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2-&g ...

最新文章

  1. 德国科学院院士:传统企业寻求变革,向智能制造靠近
  2. 64 DLL动态链接库换一台电脑就不能加载
  3. 记事本快捷键设置 java_Java给JFrame窗口设置热键---不完整记事本
  4. 管理自动化:企业上云必由之路
  5. 线程基础知识_Synchronized_ThreadAPI_自定义锁_获取线程运行时异常
  6. android 缓存头像,android 实现类似微信缓存和即时更新好友头像示例
  7. MS CRM 2011 Field Security Profile
  8. 相机标定(二)—— 投影变换相关基础概述
  9. PHP上传文件大小和时间限制
  10. VS2015 输出目录、中间目录、目标文件名、工作目录
  11. Gartner发布2011年SIEM市场分析报告(幻方图)
  12. pubg微信登录服务器维护,全军出击微信登录不了怎么办
  13. hibernate操作步骤(代码部分)
  14. Simulink三相电机仿真(2)
  15. C语言程序设计第四次作业——选择结构(2)
  16. 《精读 Mastering ABP Framework》教程发布
  17. Java字符串去重的几种实现
  18. OpenVZ、KVM、Xen、Hyper-V有什么区别?
  19. 2021字节跳动秋招整理牛客网---Java后端提前批面试
  20. 如何使用Shiro实现不同用户登录成功后跳转到不同主页?

热门文章

  1. python翻译成中文蟒蛇_python为什么叫大蟒蛇
  2. php artisan怎么用,php artisan常用方法
  3. KiCAD电路仿真入门
  4. 异常问题解决方案经验总结
  5. java开源bs系统_WCP是一套BS架构的开源知识管理系统、知识库系统。它.PDF
  6. user-select的详细用法
  7. vue在微信里面的兼容问题_vue 微信浏览器缓存问题解决方案
  8. Sequence Model-week1编程题3-用LSTM网络生成爵士乐
  9. 软文推广类的文章怎么写?
  10. 麦克风阵列matlab,matlab关于麦克风阵列仿真的问题