Leetcode算法Java全解答--19. 删除链表的倒数第N个节点
Leetcode算法Java全解答–19. 删除链表的倒数第N个节点
文章目录
- Leetcode算法Java全解答--19. 删除链表的倒数第N个节点
- 题目
- 想法
- 结果
- 总结
- 代码
- 我的答案
- 大佬们的答案
- 测试用例
- 其他
题目
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
想法
- 空间换时间的做法
用一个长度为n+1的数组接收节点
不过需要实时更新数组,有点复杂
时间复杂度为n,空间复杂度为n
2. 遍历2次法
先循环一次,算出长度,不过扫描了2次,
不符合题目
复杂度n/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个节点相关推荐
- Leetcode算法Java全解答--37. 解数独
Leetcode算法Java全解答–37. 解数独 文章目录 Leetcode算法Java全解答--37. 解数独 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 编写一个 ...
- Leetcode算法Java全解答--12. 整数转罗马数字
Leetcode算法Java全解答–12. 整数转罗马数字 文章目录 Leetcode算法Java全解答--12. 整数转罗马数字 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 ...
- Leetcode算法Java全解答--17. 电话号码的字母组合
Leetcode算法Java全解答–17. 电话号码的字母组合 文章目录 Leetcode算法Java全解答--17. 电话号码的字母组合 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用 ...
- Leetcode算法Java全解答--41. 缺失的第一个正数
Leetcode算法Java全解答–41. 缺失的第一个正数 文章目录 Leetcode算法Java全解答--41. 缺失的第一个正数 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 ...
- Leetcode算法Java全解答--75. 颜色分类
Leetcode算法Java全解答–75. 颜色分类 文章目录 Leetcode算法Java全解答--75. 颜色分类 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...
- Leetcode算法Java全解答--60. 第k个排列
Leetcode算法Java全解答–60. 第k个排列 文章目录 Leetcode算法Java全解答--60. 第k个排列 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 ...
- Leetcode算法Java全解答--73. 矩阵置零
Leetcode算法Java全解答–73. 矩阵置零 文章目录 Leetcode算法Java全解答--73. 矩阵置零 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...
- Leetcode算法Java全解答--16. 最接近的三数之和
Leetcode算法Java全解答–16. 最接近的三数之和 文章目录 Leetcode算法Java全解答--16. 最接近的三数之和 题目 想法 结果 总结 代码 我的答案 暴力破解 滑动列表 大佬 ...
- [链表|多解法] leetcode 19 删除链表的倒数第N个节点
[链表|多解法] leetcode 19 删除链表的倒数第N个节点 1.题目 题目链接 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2-&g ...
最新文章
- 德国科学院院士:传统企业寻求变革,向智能制造靠近
- 64 DLL动态链接库换一台电脑就不能加载
- 记事本快捷键设置 java_Java给JFrame窗口设置热键---不完整记事本
- 管理自动化:企业上云必由之路
- 线程基础知识_Synchronized_ThreadAPI_自定义锁_获取线程运行时异常
- android 缓存头像,android 实现类似微信缓存和即时更新好友头像示例
- MS CRM 2011 Field Security Profile
- 相机标定(二)—— 投影变换相关基础概述
- PHP上传文件大小和时间限制
- VS2015 输出目录、中间目录、目标文件名、工作目录
- Gartner发布2011年SIEM市场分析报告(幻方图)
- pubg微信登录服务器维护,全军出击微信登录不了怎么办
- hibernate操作步骤(代码部分)
- Simulink三相电机仿真(2)
- C语言程序设计第四次作业——选择结构(2)
- 《精读 Mastering ABP Framework》教程发布
- Java字符串去重的几种实现
- OpenVZ、KVM、Xen、Hyper-V有什么区别?
- 2021字节跳动秋招整理牛客网---Java后端提前批面试
- 如何使用Shiro实现不同用户登录成功后跳转到不同主页?