【牛客刷题】——链表中倒数第K个结点

链表中倒数第K个结点

  • 题目描述
  • 思路分析
  • 代码实现

题目描述

【牛客刷题】——链表中倒数第K个结点_第1张图片

思路分析

我们可以使用快慢指针的方法,定义两个指针,fast为快指针,slow为慢指针。先让fast走k步,然后让fast和slow同步向前走,当fast走到NULL时,slow恰好走到倒数第k个数。我们以k=2为例:
【牛客刷题】——链表中倒数第K个结点_第2张图片

代码实现

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
    struct ListNode* fast,*slow;
    fast = slow = pListHead;
    if(k == 0)
    {
        return NULL;
    }
    while(k--)
    {
        if(fast==NULL)
        {
            return NULL;
        }
        fast=fast->next;
    }
    while(fast)
    {
        fast=fast->next;
        slow=slow->next;
    }
    return slow;
}

你可能感兴趣的:(数据结构)