《手撕链表题系列-4》链表中倒数第k个结点

简介: 前言 本系列主要讲解链表的经典题注:划重点!!必考~

找到链表的中间结点

牛客链接:链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)


  • 题目描述:


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

示例:25.png


  • 解题思路:
  • 一般思路:

遍历链表两次


  • 高效思路:
  1. 使用两个指针
  2. 快指针先走k步
  3. 慢指针再与快指针一起走
  4. 当快指针走完时,慢指针走到倒数第k个结点

注意:k的大小可能超过链表长度这一特殊情况

注:这里我们来实现高效思路


参考代码:

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */
/**
 * 
 * @param pListHead ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
    //链表不为NULL
    if(pListHead==NULL)
        return NULL;
    struct ListNode* slow=pListHead,*fast=pListHead;
    while(k--)
    {
        //节点数量比k小
        if(fast==NULL)
            return NULL;
        fast=fast->next;
    }
    //fast为NULL则停止
    while(fast)
    {
        fast=fast->next;
        slow=slow->next;
    }
    return slow;
}
  • 结果:26.png

每日k题无烦恼,点赞学习不得了~

相关文章
|
1月前
19 删除链表的倒数第 N 个结点
19 删除链表的倒数第 N 个结点
|
2月前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
2月前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
|
12天前
|
存储 Java
高效删除链表倒数节点最优实现
要删除链表的倒数第 n 个节点,并返回链表的头节点,我们可以使用一趟扫描的方法来实现。这个方法涉及使用两个指针:快指针和慢指针。
|
13天前
19. 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点
|
17天前
|
存储
三种方法实现获取链表中的倒数第n个元素
三种方法实现获取链表中的倒数第n个元素
14 0
|
26天前
【力扣】19. 删除链表的倒数第 N 个结点
【力扣】19. 删除链表的倒数第 N 个结点
数据结构|双向链表|带头结点|头插|尾插|尾删|头删
数据结构|双向链表|带头结点|头插|尾插|尾删|头删
|
2月前
LeetCode刷题---876. 链表的中间结点(快慢指针)
LeetCode刷题---876. 链表的中间结点(快慢指针)
|
2月前
|
C语言
反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】
反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】