当前位置:网站首页>链表中倒数第k个节点(顺序查找、快慢指针)
链表中倒数第k个节点(顺序查找、快慢指针)
2022-04-22 08:17:00 【学海无涯苦作舟呀】
题目链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/
题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

方法一:遍历得到链表长度,顺序查找,第n-k+1个位置就是倒数第k个位置。
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
int length = 0;//链表长度
ListNode cur = null;
for(cur = head;cur != null ;cur = cur.next){
length++;
}
for(cur = head;length>k;cur = cur.next){
length--;
}
return cur;
}
}
方法二:快慢指针
解题思路:我们将快指针fast 指向链表的第k+1 个节点,慢指针slow 指向链表的第一个节点,此时二者之间刚好间隔 k个节点。此时两个指针同步向后走,当快指针走到链表的尾部空节点时,此时慢指针刚好指向链表的倒数第k个节点。
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
//快慢指针
ListNode fast = head;
ListNode slow = head;
for(int i = 0; i < k; i++){
//fast移动到第k+1节点位置
fast = fast.next;
}
while(fast != null) {
slow = slow.next;
fast = fast.next;
}
return slow;
}
}
版权声明
本文为[学海无涯苦作舟呀]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46184836/article/details/124329773
边栏推荐
猜你喜欢
随机推荐
关于我想借款却被骗了一万五这件事
素数求解的N种境界
Meaning of GMT and CST in programming
Flume 组成,Put 事务,Take 事务
How to view port occupied in window
C语言的学习目标和大致内容
Restore MySQL service after computer reset
详解转义字符
RedHat7配置yum
PCIe learning - Introduction to PCIe bus architecture: transaction layer - data link layer - physical layer (8)
Concept and understanding of memory address
Common escape characters
QT file reading and writing practical tutorial
J'ai essayé d'emprunter et j'ai été dupé à 15 000 $.
安卓开发——SQLite和SQLiteDatabase应用实验6笔记
N states of prime number solution
quartz中@Scheduled cron表达式
How can flume solve the problem of too many small files when collecting
工业缺陷检测项目实战(二)——基于深度学习框架yolov5的钢铁表面缺陷检测
【系统分析师之路】2020年下系统分析师案例分析真题





![Binary search [detailed explanation]](/img/a0/0ae626b4b8cc742fccde3bd7c3e4a4.png)



