[数据结构]题海啊,全是水(三)链表中倒数第k个节点、链表的回文结构、链表分割

菜鸡大学生的数据结构——刷题篇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)
    
  • 66
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 95
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 95
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Елена_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值