[算法学习]求出链表中倒数第n个节点
2016-02-18 13:55
746 查看
问题描述: 求出链表中倒数第n个节点。例如:1,2,3,4,5,倒数第2个是4
解法与分析: 用两个指针的方法。
1. 第一个指针起始位置在0位置,第二个指针起始位置在n-1位置。
2. 两个指针同时移动,每次移动1个结点。
3. 当第二个指针移动到最后一个节点时,第一个指针所指结点就是倒数第n个结点。
附:源码地址
解法与分析: 用两个指针的方法。
1. 第一个指针起始位置在0位置,第二个指针起始位置在n-1位置。
2. 两个指针同时移动,每次移动1个结点。
3. 当第二个指针移动到最后一个节点时,第一个指针所指结点就是倒数第n个结点。
参考代码如下
[code]static class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; } public ListNode(int val, ListNode next) { this.val = val; this.next = next; } @Override public String toString() { return "ListNode [val=" + val + "]"; } } public static ListNode getLastNode(ListNode head, int n) { if (head == null || n <= 0) { return null; } ListNode left = head; ListNode right = head; for (int i = 1; i < n; i++) { right = right.next; if (right == null) { return null; } } while (right.next != null) { left = left.next; right = right.next; } return left; }
附:源码地址
相关文章推荐
- 加密算法介绍
- Centos YUM 升级PHP至5.3.3
- [Unity]Android(安卓)代码安卓APK时,使用系统安装器安装的[最正确]办法(不弹出选择打开的程序)
- 黑客魔术!如何黑掉一台根本不联网的电脑
- android进程间通信之Broadcast
- 为什么 volatile 关键字不能在 kernel 中使用(linux kernel 文档翻译)
- [算法学习]判断链表是否是环结构
- Java中通过UDP协议发送和接受数据
- linux 笔记
- Java中通过UDP协议发送和接受数据
- 1.基础部分
- 常用的抓包软件
- [算法学习]合并两个排序的链表
- 虚拟按键隐藏之后cocos游戏的适配问题
- Unity3d修炼之路:用Mesh绘制一个Cube
- 设计模式之装饰器模式
- iOS-获取当前设备的信息,网络状态,运营商,设备震动.获取设备信息
- metaq架构原理
- [算法学习]反转链表
- [算法学习]计算出二进制数中1的个数