快慢指针之:链表中倒数第k个结点

简介: 快慢指针之:链表中倒数第k个结点

题目描述

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

题目分析

我们可以利用快慢指针来解决问题:

思路一:

先让fast走k步,这时候fast和slow之间的距离就是k,然后让fast和slow同时同步往后走,当fast走到NULL的时候,slow就指向了倒数第k个结点了

while(k--)就是走k步

思路二:

先让fast走k-1步,这时候fas->next和slow之间的距离就是k,然后让fast和slow同时同步往后走,当fast->next走到NULL的时候,slow就指向了倒数第k个结点了

while(--k)就是走k-1步,由于fast走到NULL就没有fast->next了,这里我们需要加一个判断:

fast或者fast->next为NULL就返回NULL

代码示例

代码一

根据思路一,我们可以写出代码一:

/**
 * 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* fast = pListHead, *slow = pListHead;
    while(k--)
    {
        if(fast==NULL)
        {
            return NULL;
        }
        fast=fast->next;
    }
    while(fast)
    {
        slow=slow->next;
        fast=fast->next;
    }
    return slow;
}

结果就可以通过咯

代码二

根据思路二,我们可以写出代码二:

/**
 * 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* fast = pListHead, *slow = pListHead;
    while(--k)
    {
        if(fast==NULL||fast->next==NULL)
        {
            return NULL;
        }
        fast=fast->next;
    }
    while(fast->next)
    {
        slow=slow->next;
        fast=fast->next;
    }
    return slow;
}

结果当然就是通过

相关文章
|
23天前
19 删除链表的倒数第 N 个结点
19 删除链表的倒数第 N 个结点
|
6天前
|
存储
三种方法实现获取链表中的倒数第n个元素
三种方法实现获取链表中的倒数第n个元素
数据结构|双向链表|带头结点|头插|尾插|尾删|头删
数据结构|双向链表|带头结点|头插|尾插|尾删|头删
|
18天前
数据结构--链表刷题(一)快慢指针(下)
数据结构--链表刷题(一)快慢指针
14 0
|
18天前
数据结构--链表刷题(一)快慢指针(上)
数据结构--链表刷题(一)快慢指针
16 0
|
23天前
|
算法 C语言 索引
环形链表(快慢指针)
环形链表(快慢指针)
|
2月前
|
存储 编译器 C语言
【数据结构】深入浅出理解链表中二级指针的应用
【数据结构】深入浅出理解链表中二级指针的应用
30 0
|
2月前
|
算法 Java
快慢指针该如何操作?本文带你认识快慢指针常见的三种用法及在链表中的实战
快慢指针该如何操作?本文带你认识快慢指针常见的三种用法及在链表中的实战
24 0
|
20天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
20 0
|
20天前
|
存储 C语言 C++
C语言 — 指针进阶篇(上)
C语言 — 指针进阶篇(上)
27 0