第4天 删除链表第K结点
来源:互联网 发布:算法与数据结构自测题 编辑:程序博客网 时间:2024/05/19 15:43
题目:
输入一个链表,输出该链表中倒数第K个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。
例如一个链表有6个结点,从头结点开始他们的值依次是
1、 2、 3、 4、 5、 6。
这个链表的倒数第3个结点是值为4的结点。
利用递归的堆栈调用顺序
/** * 面试题15 输入一个链表,输出该链表中倒数第K个结点。 * 为了符合大多数人的习惯,本题从1开始计数, * 即链表的尾结点是倒数第1个结点。 * 例如一个链表有6个结点,从头结点开始他们的值依次是 * 1、 2、 3、 4、 5、 6。 * 这个链表的倒数第3个结点是值为4的结点。 * * 2014-1-18 */public class KthNodeFromEnd <T extends Comparable<? super T>> {class Node<T> {T data;Node<T> next;}private Node<T> mHeade;public boolean addNode(T data) {if (data == null) {throw new NullPointerException();}if (mHeade == null) {mHeade = new Node<T>();mHeade.data = data;} else {Node<T> currentNode = mHeade;while (currentNode.next != null) {currentNode = currentNode.next;}Node<T> newNode = new Node<T>();newNode.data = data;currentNode.next = newNode;}return true;}private int mIndex = 0;public void printIndexKValue(int k) {if (k <= 0) {throw new IllegalArgumentException();}if (mHeade == null) {throw new NullPointerException();}mIndex = 0;printValue(mHeade, k);}private void printValue(Node<T> currentNode, int k) {if (currentNode != null) { // 需要进行控制判断printValue(currentNode.next, k);mIndex++;if (mIndex == k) {System.out.println(currentNode.data);}}}public void output() {Node<T> currentNode = mHeade;while (currentNode != null) {System.out.print(currentNode.data + " ");currentNode = currentNode.next;}System.out.println();}public static void main(String[] args) {KthNodeFromEnd<Integer> kthNodeFromEnd = new KthNodeFromEnd<Integer>();kthNodeFromEnd.addNode(9);kthNodeFromEnd.addNode(100);kthNodeFromEnd.addNode(2);kthNodeFromEnd.addNode(73);kthNodeFromEnd.addNode(82);kthNodeFromEnd.addNode(105);kthNodeFromEnd.addNode(666);kthNodeFromEnd.output();kthNodeFromEnd.printIndexKValue(1);kthNodeFromEnd.printIndexKValue(2);kthNodeFromEnd.printIndexKValue(3);kthNodeFromEnd.printIndexKValue(4);kthNodeFromEnd.printIndexKValue(5);kthNodeFromEnd.printIndexKValue(6);kthNodeFromEnd.printIndexKValue(7);}}
参考资料:
《剑指offer》 面试题15
0 0
- 第4天 删除链表第K结点
- 删除单链表的倒数第k个结点
- Lintcode 删除链表中倒数第k个结点
- 单链表操作之删除倒数第k个结点
- 链表面试题---删除倒数第k个结点、逆置单链表
- 链表面试题(六)---删除单链表倒数第k个结点
- 无头单链表第k个结点的删除
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第 k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 输出链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 求链表中倒数第k个结点
- C++指针链表分析
- 黑马程序员--基础加强--第八篇--类加载器
- 第4天 调整数组顺序使奇数和位于偶数前面
- 建立Qt+VS2010开发环境
- win7 32位 memcached安装
- 第4天 删除链表第K结点
- mysql命令行操作
- 抽象数据类型
- Java的Random总结
- 用My97扩充成的ExtJs日期时间插件
- 题目1099:后缀子串排序
- int daemon(int nochdir, int noclose);
- C语言之冒泡排序
- Matlab实现批量处理图像的两种方法