1. 题目描述

输入一个链表,输出该链表中倒数第k个结点。

2. 解体思路

方法一:简单来说就是先遍历整个链表的长度L,然后根据k,从头节点开始遍历,到L-k,得到相应的节点。
方法二:两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指针走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。

3. 代码实现

方法一:

class ListNode {int val;ListNode next = null;public ListNode(int val) {this.val = val;}
}public class FindKthToTail {public static void main(String[] args) {// 定义节点ListNode root = new ListNode(0) ;ListNode n1 = new ListNode(3) ;ListNode n2 = new ListNode(5) ;ListNode n3 = new ListNode(6) ;ListNode n4 = new ListNode(7) ;ListNode n5 = new ListNode(9) ;// 连接节点root.next=n1;n1.next=n2;n2.next=n3;n3.next=n4;n4.next=n5;ListNode tmpnode=FindToTail(root, 5);System.out.println(tmpnode.val);}public static ListNode FindToTail(ListNode head, int k) {if(head==null || k<=0) {return null;}          ListNode node=head;int count=0;while(node!=null) {node=node.next;count++;}System.out.println(count);if (count < k)  return null;ListNode nodetmp=head;for(int i=0; i<count-k; i++) {nodetmp=nodetmp.next;}return nodetmp;}}

方法二:

class ListNode {int val;ListNode next = null;public ListNode(int val) {this.val = val;}
}public class FindKthToTail {public static void main(String[] args) {// 定义节点ListNode root = new ListNode(0) ;ListNode n1 = new ListNode(3) ;ListNode n2 = new ListNode(5) ;ListNode n3 = new ListNode(6) ;ListNode n4 = new ListNode(7) ;ListNode n5 = new ListNode(9) ;// 连接节点root.next=n1;n1.next=n2;n2.next=n3;n3.next=n4;n4.next=n5;ListNode tmpnode=FindToTail(root, 2);   System.out.println(tmpnode.val);}public static ListNode FindToTail(ListNode head, int k) {if(head==null || k<=0) {return null;}               ListNode pre=head;ListNode last=head;         for(int i=1; i<k; i++) {if(pre.next!=null) {pre=pre.next;}else {return null;}}      while(pre.next!=null) {pre=pre.next;last=last.next;}     return last;}}

运行:

7

java 链表中倒数第k个结点相关推荐

  1. 【Java】找到链表中倒数第k个结点

    题目描述 : 输入一个链表,输出该链表中倒数第k个结点. 解题思路 : 1.根据以上链表进行分析 2.算法思想 : 定义两个引用,即快慢指针,都从头节点开始向后走: 要找到倒数第k个节点,即要让快指针 ...

  2. 《剑指offer》链表中倒数第k个结点

    题目:输入一个链表,输出该链表中倒数第k个结点. 解析:需要逆向输出节点,可以正向把所有的节点都保存到list里,然后再逆向的输出 /* public class ListNode {int val; ...

  3. c语言求单链表倒数第k个节点,链表中倒数第k个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 解析 设置两个指针,一个遍历链表到第k-1个结点,第二个再开始遍历,直到遍历到链表的最后一个结点,那么第二个指针指向的,就是倒数第k个结点. Ja ...

  4. 剑指offer_第14题_链表中倒数第k个结点_Python

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 理解 链表详解 python数据结构之链表 解题思路 思路1 确定链表种结点个数lenth 倒数第k个结点就是第length-k+1个结点 需要考 ...

  5. 剑指offer:链表中倒数第k个结点 python实现

    链表中倒数第k个结点 输入一个链表,输出该链表中倒数第k个结点. 解题思路 暴力求解: 判断链表是否为空: 复制链表,遍历一遍统计其长度: 如果长度小于k.则返回None: 否则,返回其长度-k的链表 ...

  6. 【剑指offer-Java版】15链表中倒数第K个结点

    链表中倒数第K个结点:快慢指针解决 需要注意的地方是 1) 可能会存在输入的链表大小小于k 2) 输入的k可能小于等于0 - 所以必须限定k大于0 public class _Q15 {public ...

  7. 面试经典:链表中倒数第k个结点?如何从大量数据中找出高频词?

    记录两道面试题: 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(单向链表) 拿到这个问题的时候自然而然会想到让链表从末尾开始next   K-1 次不就是第K-1个节点了么,但是必须要注意一 ...

  8. 剑指Offer_14_链表中倒数第k个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思路 利用两个指针,第一个指针先走k步,然后第二个指针从头开始走,当第一个指针到达最后时,第二个指针指向的结点就是倒数k个.如果第一个指针走到 ...

  9. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

    第 13 题(链表): 题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表 的尾指针. 链表结点定义如下: struct ListNode { int m_nKey ...

最新文章

  1. pytorch lstm crf 代码理解
  2. poj3678详解(2-SAT)
  3. 【分布式】通过Numpy创建Dask.array
  4. python短期预测图_Python中利用长短期记忆模型LSTM进行时间序列预测分析
  5. Linux软件包组的选择
  6. 如何使用计算机改进生产线,第四章 计算机生产管理.doc
  7. 操作系统(一)计算机系统概述
  8. MATLAB学习 之 创建向量
  9. KTV用什么收银管理系统管店?
  10. 共基极放大电路_轻松辨别放大电路的正负反馈
  11. 萝卜小铺与店主的故事(十一)
  12. 以太坊白皮书(中文版)
  13. 如何记账,教你记录初始金额,查询账户余额
  14. 零基础的人怎么备考二建
  15. JAVA 中 Redis与ehcache对比与使用
  16. 【面经】阿里数据研发三面面经
  17. js moment.js 给定时间 获取自然月、周的时间轴
  18. 【Leetcode】5 longestPalindrome python解法
  19. 线程池和信号量模拟酒店(旅店)预定房间
  20. 少年为了学计算机的电影,少年十大励志电影排行榜 能改变人生的励志电影推荐...

热门文章

  1. VTK:几何对象之PolyLine
  2. OpenCV使用OpenPose dnn进行人或手姿势检测的实例(附完整代码)
  3. OpenGL剪切平面和双面渲染
  4. QT的QStyle类的使用
  5. C++虚析构和纯虚析构
  6. c++类与类的泛化(Generalization)关系
  7. C语言求最大公约数3种方法
  8. java下載與安裝_[Java] 下載與安裝Java官方開發工具:NetBeans IDE
  9. c语言for循环说课稿,C语言FOR循环说课稿.docx
  10. echart label 不随值变化位置_炼丹神器来了! 模型结构、训练日志、特征提取都能可视化,调参不慌了!...