09 链表中找出倒数第k个数 & 找出链表正中间的数据
来源:互联网 发布:网络传销怎么定罪 编辑:程序博客网 时间:2024/06/15 23:31
前言
本博文部分图片, 思路来自于剑指offer 或者编程珠玑
问题描述
思路
对于找到倒数的第k个数 : 两个指针, 先让第一个指针先走k步, 然后两个指针一起移动, 直到第一个指针为null, 第二个指针指向的数据即为所求
对于找到中间数 : 同样两个指针, 一个指针每次移动两步, 另外一个指针每次移动一步, 到第一个指针为null的时候, 第二个指针即为所求
参考代码
/** * file name : Test30GetTheKthNumberInverseOrder.java * created at : 7:35:08 PM Jun 5, 2015 * created by 970655147 */package com.hx.test04;public class Test30GetTheKthNumberInverseOrder { // 找到倒数第k个结点 // 找到链表的中间结点 public static void main(String []args) { int k = 3; LinkedList ll = new LinkedList();// LinkedList02 ll = new LinkedList02(); ll.add(4); ll.add(2); ll.add(2); ll.add(5); ll.add(34); ll.add(51); Log.log(ll); getTheKthNumberInverseOrder01(ll.head.next, k); getCenter(ll.head.next); } // 思路 : 两个索引, 一个临时索引, 一个为元素索引 // 先将临时索引 向前移动k-1步, 然后在同时移动tmp, ele索引, 知道临时索引 移动到链表末尾 // 此时 元素索引即为所求 public static void getTheKthNumberInverseOrder01(Node head, int k) { if(head == null || k <= 0) { return ; } Node ele = head, tmp = head; for(int i=0; i<k-1; i++) { if(tmp.next != null) { tmp = tmp.next; } else { return ; } } while(tmp.next != null) { tmp = tmp.next; ele = ele.next; } Log.log(ele.data ); } // 获取链表的中间的那个节点, 如果元素个数是奇数 获取正中间的结点, 如果元素个数是偶数获取中间的两个结点之一 // 思路 : 两个元素索引, 一个移动每次移动两步, 另一个每次移动一步 // 当快的索引移动到链表结尾的时候, 慢的结点即为所求[若元素个数为偶数 则获取中间结点的前者] public static void getCenter(Node head) { if(head == null) { return ; } Node faster = head, slower = head; while(faster.next != null) { faster = faster.next; if(faster.next == null) { break ; } faster = faster.next; slower = slower.next; } Log.log(slower.data); }}
效果截图
总结
似乎都不是很难..
注 : 因为作者的水平有限,必然可能出现一些bug, 所以请大家指出!
0 0
- 09 链表中找出倒数第k个数 & 找出链表正中间的数据
- 找出链表中倒数第K个结点
- 找出单向链表中倒数第k个节点的算法
- Java-找出单链表的倒数第k结点
- 找出单链表的倒数第k个元素
- 找出链表的倒数第K个结点
- 找出单链表的倒数第k个节点
- CCI 2.2 找出单向链表中倒数第k个结点
- [Java] 找出链表中倒数第k个节点
- 3. 找出链表中倒数第k个节点
- 在链表中找出倒数第K个节点
- 找出单链表中倒数第 K个结点
- 找出单链表中倒数第 k 个元素
- 面试题之链表问题 - 找出倒数第k个元素(或中间元素)
- 找出最小的k个数
- LeetCode60 n个数的排列组合找出第k个排列
- 找出一堆数据中最小的K个数问题
- 找出一堆数据中最大或者最小的K个数
- 【2】Windows游戏安全之路——Windows核心编程之环境搭建
- 虚方法与抽象方法的区别
- Tortoise SVN实用教程
- C/C++程序的内存区域划分
- win8/win10任务栏/语言栏跳动/闪烁
- 09 链表中找出倒数第k个数 & 找出链表正中间的数据
- vc中edit控件使用总结
- 考试之道
- 面向对象的相关问题
- android自定义悬浮控件
- Codeforces Round #331 (Div. 2) B. Wilbur and Array (贪心)
- PHP Warning: phpinfo(): It is not safe to rely on the system's timezone setting
- 一种键盘扫描程序,很方便
- 欢迎使用CSDN-markdown编辑器