删除链表中倒数第n个节点
2015-11-25 00:59
741 查看
1、给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
注意
链表中的节点个数大于等于n
挑战
O(n)时间复杂度
解题思路:刚开始看到倒数第n个节点,不禁感慨如果是数组就可以直接倒着来了。不过针对链表,一定要想起来最常用的方法---快慢指针。设一个fast和slow指针;快指针先走n步,然后快慢指针一起走,当fast==null,慢指针就值的是倒数第n个,然后删除就行。
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
注意
链表中的节点个数大于等于n
挑战
O(n)时间复杂度
解题思路:刚开始看到倒数第n个节点,不禁感慨如果是数组就可以直接倒着来了。不过针对链表,一定要想起来最常用的方法---快慢指针。设一个fast和slow指针;快指针先走n步,然后快慢指针一起走,当fast==null,慢指针就值的是倒数第n个,然后删除就行。
/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /** * @param head: The first node of linked list. * @param n: An integer. * @return: The head of linked list. */ ListNode removeNthFromEnd(ListNode head, int n) { // write your code here ListNode fast=head; ListNode result = new ListNode(0); result.next = head; for(int i=0;i<n-1;i++){ fast = fast.next; } ListNode now = result; while(fast.next != null){ fast = fast.next; now = now.next; } now.next = now.next.next; return result.next; } }
相关文章推荐
- struts2提示“There is no Action mapped for namespace [/] and action name [XXX]... ”错误的解决办法
- 生活之Windows的30年变迁历史
- 如何让windows版Safari支持H5 audio/video?
- 网页设计大赛第七天
- 关于srand(time(0)) rand() 的解释
- Maxout
- 生活之行军蚁"死亡漩涡"
- Swift 2.0学习笔记(Day 3)——Swift 2.0之后增加的关键字
- web前端学习 11/24-25
- Socket的创建和连接
- 我是如何面试iOS开发者的?
- Qt学习之路(27): 渐变填充
- 内存页面管理
- LinearGradient线性渲染
- Angular 学习笔记——ng-disable
- 数组中不常用却又好用的方法探索
- Swift 2.0学习笔记(Day 2)——使用Web网站编写Swift代码
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- MySQL解决中文乱码问题
- WebGL实现HTML5的3D贪吃蛇游戏