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

原题链接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&&tqId=11167&rp=2&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

【数据结构OJ题】链表中倒数第k个结点_第1张图片

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;
}

【数据结构OJ题】链表中倒数第k个结点_第2张图片

你可能感兴趣的:(数据结构,数据结构,链表,c语言,双指针,算法,leetcode)