乘风破浪:LeetCode真题_019_Remove Nth Node From End of List

一、前言

这次总算到了链表的操作了,之后肯定会有排序算法,二叉树,排序树,图等等的操作,现在我们先从链表开始。

二、Remove Nth Node From End of List

2.1 问题

2.2 分析与解决

其实这个问题真的不难,只要知道了链表的长度,然后做一个减法就能找到需要移除的节点了,但是题目上说可以在一次遍历之内就完成运算吗?这就有点难度了,我们可能一时想不开,作为单向链表,又怎么能完成这样巧妙的任务呢?!于是有人告诉我们,在原有的架构不能解决的时候,我们就需要用空间换时间了,那么到底要怎么做呢?这个空间就是再生成一个指针,利用对称性来完成。这是非常巧妙的。

我们先看两次遍历的算法:

public ListNode removeNthFromEnd(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;
}

     然后是一次遍历的:

public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(0);dummy.next = head;ListNode first = dummy;ListNode second = dummy;// Advances first pointer so that the gap between first and second is n nodes apartfor (int i = 1; i <= n + 1; i++) {first = first.next;}// Move first to the end, maintaining the gapwhile (first != null) {first = first.next;second = second.next;}second.next = second.next.next;return dummy.next;
}

    从示意图上我们可以清楚地看出通过两个指针一次遍历就能锁定目标。

三、总结

有的时候在某种情况下不可能的事情,如果加入了一些指针和思想就能产生很非凡的作用了。

转载于:https://www.cnblogs.com/zyrblog/p/10216481.html

乘风破浪:LeetCode真题_019_Remove Nth Node From End of List相关推荐

  1. 乘风破浪:LeetCode真题_007_Reverse Integer

    乘风破浪:LeetCode真题_007_Reverse Integer 一.前言 这是一个比较简单的问题了,将整数翻转,主要考察了取整和取余,以及灵活地使用long型变量防止越界的问题. 二.Reve ...

  2. 乘风破浪:LeetCode真题_038_Count and Say

    乘风破浪:LeetCode真题_038_Count and Say 一.前言     这一道题目,很类似于小学的问题,但是如果硬是要将输入和结果产生数值上的联系就会产生混乱了,因此我们要打破思维定势. ...

  3. 乘风破浪:LeetCode真题_010_Regular Expression Matching

    乘风破浪:LeetCode真题_010_Regular Expression Matching 一.前言 关于正则表达式我们使用得非常多,但是如果让我们自己写一个,却是有非常大的困难的,我们可能想到状 ...

  4. 乘风破浪:LeetCode真题_008_String to Integer (atoi)

    乘风破浪:LeetCode真题_008_String to Integer (atoi) 一.前言 将整型转换成字符串,或者将字符串转换成整型,是经常出现的,也是必要的,因此我们需要熟练的掌握,当然也 ...

  5. LeetCode算法入门- Remove Nth Node From End of List -day17

    LeetCode算法入门- Remove Nth Node From End of List -day17 题目解释: Given a linked list, remove the n-th nod ...

  6. 【恋上数据结构】归并排序 + LeetCode真题

    归并排序 前言 归并排序 序列分割-divide 序列合并-merge 合并到新序列 原地合并-merge 原地合并-merge-实现 归并排序完整代码 复杂度与稳定性 常见的递推式与复杂度 Leet ...

  7. 【LeetCode】19. Remove Nth Node From End of List

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  8. 算法学习笔记 4-3 深搜(DFS)与广搜(BFS):初识问题状态空间 与 LeetCode真题(Java)

    喜欢该类型文章可以给博主点个关注,博主会持续输出此类型的文章,知识点很全面,再加上LeetCode的真题练习,每一个LeetCode题解我都写了详细注释,比较适合新手入门数据结构与算法,后续也会更新进 ...

  9. 算法面试不懂这6大数据结构知识一定挂!(附力扣LeetCode真题讲解)

    本文作者:苏勇,Google 资深技术工程师 首发地址:https://mp.weixin.qq.com/s/u8pvmupISQ5D4kGIkgfKbA 在互联网行业的算法面试中经常会被考到数据结构 ...

  10. 【Leetcode】19. Remove Nth Node From End of List (cpp)

    讲思路的文章已经很多了,不再赘述,这里用的方法是两个指针一次遍历算法.想强调的是有可能要删除的就是第一个结点.删除头节点比较方便的做法是加一个伪头节点. /*** Definition for sin ...

最新文章

  1. 快过年了,为过完年跳槽的人准备一份面试题
  2. 如何居中“位置:绝对”元素
  3. Stanford UFLDL教程 微调多层自编码算法
  4. python接口自动化-参数化
  5. 框架:HTTP请求的表单提交的几种方式
  6. 前后台分离使用cookie判断用户状态以及传递参数
  7. 宁波大学计算机专业英语面试的形式,宁波大学信息学院计算机网络2014复试试题(回忆版)...
  8. 使用Chronicle Wire将YAML连接到文件或网络
  9. 注册界面演示代码(前端开发)
  10. Wireshark(2):应用Wireshark观察基本网络协议
  11. 手把手教你--JAVA微信支付(H5支付)
  12. 计算机达人成长之路 目录
  13. python删除数据库_用Python删除Cosmos数据库文档
  14. 80-10-010-原理-Java NIO-简介
  15. 深入理解ThreadLocal变量的功能和使用
  16. kubernetes1.4新特性:支持两种新的卷插件
  17. ACL 2021 | 火山翻译成绩斐然
  18. win10 同时多用户远程桌面连接-RDPWrap-v1.6.2-support-21H2-19044.1949
  19. 《实战突击:Java Web项目整合开发》简介及源码
  20. 图形面积用计算机软件计算方法,AutoCAD2018如何算面积 计算图形面积教程

热门文章

  1. java树遍历算法_Java递归算法实现目录树的遍历
  2. typecho图标_使你的Typecho支持Emoji表情
  3. 关闭ant的tree_ant-design Tree组件问题
  4. 16位汇编第一讲简介
  5. java服务器客户端程序在联机运行时被防火墙拦截
  6. MySQL 复习笔记
  7. Material Dialogs
  8. android应用程序跳转到系统的各个设置页面
  9. 交换机 VLAN配置基础及实例
  10. python基础--函数作用域