原题链接: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. 题目描述
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;elsefast=fast->next;}while(fast){slow=slow->next;fast=fast->next;}return slow;
}