菜鸡大学生的数据结构——刷题篇3
我们的第三题小宝贝儿回归了!
菜鸡大学生明白,笔试oj题目还是以牛客网为主的,于是下定决心,准备离开力扣,去牛客网进行一番打拼。不幸的是,写又写不过,蒙又蒙不着,远程全面闪避,近身降维打击,被人类的智慧之光段错误轰炸的两面焦香。遂,润。
“刷题不慎以命填呐——” ——来自某崩溃菜鸡大学生。
链表刷题已经过半了,不出意外的话这个是倒数第二篇,再写一篇之后我们就可以写双链表了。
链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个结点。
示例:
输入: 1,{1,2,3,4,5}
返回值: {5}
解法一
这一道题,最简单的方法就是求出链表的长度,然后减去k的值。
但是要两次遍历链表,有没有遍历一次链表的方法呢?
解法二
有,快慢指针。
快指针先走k步,走完之后快慢指针一起走。当快指针遍历结束的时候慢指针正好指向链表倒数第k个节点。
以链表倒数第二个节点为例。
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
struct ListNode* fast=pListHead;
struct ListNode* slow=pListHead;
while(k--)
{
if(fast==NULL)
return NULL;
fast=fast->next;
}
while(fast)