题目描述

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

解法

pre 指针走 k-1 步。之后 cur 指针指向 phead,然后两个指针同时走,直至 pre 指针到达尾结点。

即cur与pre始终相距k-1

当用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针来遍历链表。可以让其中一个指针遍历的速度快一些。

此题需要考虑一些特殊情况。比如 k 的值小于 0 或者大于链表长度。

package demo;

public class Solution {

    public static class ListNode{
int val;
ListNode next = null; ListNode(int val){
this.val = val;
}
} public static ListNode findKthtoTail(ListNode head, int k){
if(head == null || k<1){
return null;
}
ListNode pre = head;
for(int i=0; i<k-1;i++){//先将pre指针移到第k-1位
if(pre.next != null)
pre = pre.next;
else
return null;
} ListNode cur = head;
while(pre.next != null){//遍历
pre = pre.next;
cur = cur.next;
}
return cur;
} public static void main(String[] args) {
ListNode head = new ListNode(0); ListNode node1 = new ListNode(1); head.next = node1;
ListNode node2 = new ListNode(2); node1.next = node2;
ListNode node3 = new ListNode(3); node2.next = node3;
ListNode node4 = new ListNode(4); node3.next = node4;
ListNode node5 = new ListNode(5); node4.next = node5;
ListNode node6 = new ListNode(6); node5.next = node6;
ListNode node7 = new ListNode(7); node6.next = node7;
ListNode node8 = new ListNode(8); node7.next = node8;
ListNode node9 = new ListNode(9); node8.next = node9;
ListNode node10 = new ListNode(10); node9.next = node10; ListNode cur = head;
while(cur.next != null){
cur = cur.next;
System.out.print(cur.val + " ");
} int k = 4;
ListNode resNode = findKthtoTail(head, k);
System.out.println("\n链表倒数第"+k+"个元素为:" + resNode.val); }
}

只要从头走n-k+1步即可。

最新文章

  1. 【java开发】ubuntu常用命令及环境搭建
  2. 搭建一套自己实用的.net架构(3)【ORM-Dapper+DapperExtensions】
  3. 【10-25】intelliji ide 学习笔记
  4. Linux系统启动错误 contains a file system with errors, check forced解决方法
  5. iPad 控件UIPopoverController使用
  6. 根据屏幕的宽度使用不同的css-文件
  7. CCDH证书
  8. android ListView详解继承ListActivity
  9. Codeforces Round #308 (Div. 2) C. Vanya and Scales dfs
  10. Codeforces Round #328 (Div. 2) C. The Big Race 数学.lcm
  11. hdu 3912 Turn Right
  12. 支付宝开通海外退税 阿里腾讯暗战跨境O2O_21世纪网
  13. [Leetcode][Python]25: Reverse Nodes in k-Group
  14. Java框架概述
  15. train problem I (栈水题)
  16. [BZOJ]3672 购票(Noi2014)
  17. 【JAVA】String[]配列の相関
  18. C++ 动态内存分配(6种情况,好几个例子)
  19. PSP(3.23——3.29)以及周记录
  20. 机器学习理论基础学习13--- 隐马尔科夫模型 (HMM)

热门文章

  1. JVM 启动参数,共分为3类
  2. PAC在异常检测中的应用
  3. MySQL拓展 视图,触发器,事务,存储过程,内置函数,流程控制,索引,慢查询优化,数据库三大设计范式
  4. Mysql基础知识--触发器
  5. USACO Score Inflation
  6. nginx使用多端口监听多个服务
  7. 6.Vue的Axios异步通信
  8. Linux性能优化实战学习笔记:第四十三讲
  9. divide two numbers using + opertor
  10. 【ASP.NET Core分布式项目实战】(五)Docker制作dotnet core控制台程序镜像