博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode19 Remove Nth Node From End of List 从链表中移除倒数第n个节点
阅读量:5757 次
发布时间:2019-06-18

本文共 1689 字,大约阅读时间需要 5 分钟。

题目要求

Given a linked list, remove the nth node from the end of list and return its head.For example,   Given linked list: 1->2->3->4->5, and n = 2.   After removing the second node from the end, the linked list becomes 1->2->3->5.Note:Given n will always be valid.Try to do this in one pass.

题意就是,从链表中移除倒数第n个节点(前提是这个被移除的节点一定存在)

思路一:利用数据结构ArrayList

从题目中可知,如果我们知道这个链表的大小,就可以直接删去节点。所以按照正常思路,我们可以先从根节点遍历一遍这个链表,得出链表的size后,再删去倒数第n个,也就是正数第size-n个节点。这样意味着遍历两次这个链表。虽然时间复杂度还是O(n),但是显然我们可以再一次遍历中完成这个任务。思路一就是将ArrayList和LinkedList相结合起来,通过ArrayList的下标完成要求

public class RemoveNthNodeFromEndofList_19 {    public ListNode removeNthFromEnd(ListNode head, int n) {        List
nodeList = new ArrayList
(); ListNode start = new ListNode(0); start.next = head; nodeList.add(start); while(head != null){ nodeList.add(head); head = head.next; } int index = nodeList.size() - n; nodeList.get(index-1).next = nodeList.get(index).next; return nodeList.get(0).next; } public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }}

思路二:利用快慢指针

思路一直接利用了ArrayList的下标完成了任务。现在跳出下标的思路,从另一个角度分析。直接从题目要求入手,如果我们获得最后一个节点,那么到最后一个节点的距离为n的就是我们所要删去的节点。我们可以使用快慢节点。快慢节点之间的距离始终是n。当快节点到达终点时,此时的慢节点就是所要删去的节点。

相比于上一种方法,这种方法也只需要一次遍历,而且占用的额外存储空间更小。

public class RemoveNthNodeFromEndofList_19 {    public ListNode removeNthFromEnd2(ListNode head, int n) {        ListNode start = new ListNode(0);        start.next = head;        ListNode slow = start;        ListNode fast = start;                for(int i = 0 ; i

clipboard.png

想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

转载地址:http://levkx.baihongyu.com/

你可能感兴趣的文章
Android组件化最佳实践 ARetrofit原理
查看>>
舍弃浮躁, 50条重要的C++学习建议
查看>>
同步手绘板——将View的内容映射成Bitmap转图片导出
查看>>
【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式!...
查看>>
微信小程序之wx.navigateback往回携带参数
查看>>
陌陌和请吃饭之类的应用,你要是能玩转,那就厉害了
查看>>
递归的运行机制简单理解
查看>>
汉字转阿斯克马值
查看>>
Java 栈与堆简介
查看>>
【supervisord】部署单进程服务的利器
查看>>
zabbix oracle监控插件orabbix部署安装
查看>>
python3 通过qq 服务器 发送邮件
查看>>
java 多线程踩过的坑
查看>>
部署Replica Sets及查看相关配置
查看>>
倒序显示数组(从右往左)
查看>>
文献综述二:UML技术在行业资源平台系统建模中的应用
查看>>
阿里云服务器 linux下载 jdk
查看>>
Swift 学习 用 swift 调用 oc
查看>>
第三章 Python 的容器: 列表、元组、字典与集合
查看>>
微信小程序开发 -- 点击右上角实现转发功能
查看>>