剑指:链表中倒数第k个节点
2024-10-19 11:07:10
题目描述
输入一个链表,输出该链表中倒数第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步即可。
最新文章
- 【java开发】ubuntu常用命令及环境搭建
- 搭建一套自己实用的.net架构(3)【ORM-Dapper+DapperExtensions】
- 【10-25】intelliji ide 学习笔记
- Linux系统启动错误 contains a file system with errors, check forced解决方法
- iPad 控件UIPopoverController使用
- 根据屏幕的宽度使用不同的css-文件
- CCDH证书
- android ListView详解继承ListActivity
- Codeforces Round #308 (Div. 2) C. Vanya and Scales dfs
- Codeforces Round #328 (Div. 2) C. The Big Race 数学.lcm
- hdu 3912 Turn Right
- 支付宝开通海外退税 阿里腾讯暗战跨境O2O_21世纪网
- [Leetcode][Python]25: Reverse Nodes in k-Group
- Java框架概述
- train problem I (栈水题)
- [BZOJ]3672 购票(Noi2014)
- 【JAVA】String[]配列の相関
- C++ 动态内存分配(6种情况,好几个例子)
- PSP(3.23——3.29)以及周记录
- 机器学习理论基础学习13--- 隐马尔科夫模型 (HMM)
热门文章
- JVM 启动参数,共分为3类
- PAC在异常检测中的应用
- MySQL拓展 视图,触发器,事务,存储过程,内置函数,流程控制,索引,慢查询优化,数据库三大设计范式
- Mysql基础知识--触发器
- USACO Score Inflation
- nginx使用多端口监听多个服务
- 6.Vue的Axios异步通信
- Linux性能优化实战学习笔记:第四十三讲
- divide two numbers using + opertor
- 【ASP.NET Core分布式项目实战】(五)Docker制作dotnet core控制台程序镜像