【数据结构OJ题】链表中倒数第k个结点

简介: 牛客题目——链表中倒数第k个结点

1. 题目描述

image.png

2. 思路分析

快慢指针法 (如果有小伙伴不了解快慢指针法,可以看看这篇文章:https://blog.csdn.net/m0_62531913/article/details/132309395?spm=1001.2014.3001.5502)

定义快慢指针fast和slow。首先让fast先走k步,然后fast和slow同时走,fast走到末尾时,slow就走到倒数第k个节点。最后我们返回slow即可。

这题需要注意的是,k有可能大于链表长度,遇到这种情况,我们直接返回空指针NULL。

3. 代码实现

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

/**
 * 
 * @param pListHead ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
   
    struct ListNode *slow=pListHead,*fast=pListHead;
    while(k--)
    {
   
        //链表没有k步长,倒数就算是空
        if(fast==NULL)
            return NULL;
        else
            fast=fast->next;
    }
    while(fast)
    {
   
        slow=slow->next;
        fast=fast->next;
    }
    return slow;
}

​​image.png

相关文章
|
3天前
|
算法
LeetCode第19题删除链表的倒数第 N 个结点
该文章介绍了 LeetCode 第 19 题删除链表的倒数第 N 个结点的解法,通过使用快慢双指针,先将快指针移动 n 步,然后快慢指针一起遍历,直到快指针到达链尾,从而找到倒数第 N 个结点的前一个结点进行删除,同时总结了快慢指针可减少链表遍历次数的特点。
LeetCode第19题删除链表的倒数第 N 个结点
|
4天前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
11天前
【数据结构】双向带头(哨兵位)循环链表 —详细讲解(赋源码)
【数据结构】双向带头(哨兵位)循环链表 —详细讲解(赋源码)
21 4
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
31 5
|
3天前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
4 0
|
3天前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
4 0
|
3天前
|
算法
【数据结构与算法】循环链表
【数据结构与算法】循环链表
4 0
|
3天前
|
存储 算法
【数据结构与算法】链表
【数据结构与算法】链表
4 0
|
5天前
【刷题记录】链表的中间结点
【刷题记录】链表的中间结点
|
6天前
|
存储 缓存
【数据结构】——顺序表与链表
【数据结构】——顺序表与链表