c++ 链表长度_Day14:链表中倒数第k个结点

76007f309faab66081a06858c52050df.png

剑指Offer_编程题——链表中倒数第k个结点

题目描述:

输入一个链表,输出该链表的倒数第k个结点。

具体要求:

时间限制: C/C++ 1秒,其他语言2秒
空间限制: C/C++32M,其他语言64M

具体思路:

思路一:

我们需要遍历出链表的长度,然后遍历出我们需要的倒数第k个结点,这是我们常规的想法,当然也考虑了代码的鲁棒性和空指针,k为0,k应该大于链表的长度。

1、首先我们用Java实现该思路:

public 

代码效果图如图所示:

70bc4edb706704dab46c0c4e2606e3fb.png

如果在牛客网中,此时代码即可编译通过,因为该编译器已经定义了结点,定义的形式如下图所示:

160f583f54948ebe817e25ff6646bfff.png

但是,我们如果在本地编译器(eclipse和IDEA)的时候,就得将该节点的定义写上,否则无法通过编译,具体实现如下:

public 

2、用python将其思路实现:

class 

代码效果图如图所示:

40faba63acab2bdeb49fd0f43b0ce49f.png

思路二:

利用栈来解决这个问题,先压入栈 ,在取出k个值便是倒数取k个值,具体用python实现如下:

class 

代码效果图如图所示:

809ea1dc295df9a7debe9a3db2c36919.png

思路三:

我们接下来探讨一种崭新的思路,首先设置两个指针,将他们之间的长度设置为k,这里需要我们注意的是,我们定义的这两个指针是两把尺子,当尺子的末指针指向链表的末尾时,它的首指针就指向第k个结点。因此在实现的过程中,我们重点是当i>=k时,尺子的首指针在进行移动。具体代码的实现如下:

public 

代码效果图如图所示:

feaf0e0afd923f4e4bc174975f22917a.png

总结

本道题主要通过输入链表考察链表的输出结点,最基本的方法就是遍历出链表的长度,然后遍历出你所需要的倒数第K个节点。更进一层的方法就是利用栈来进行处理,最高级的也是最难想到的就是设置两个指针来进行解决,最难的就是循环时当i>=k时,指针进行移动。我们要借鉴别人的一些好的idea,拓宽自己的思路。总之,继续加油,争取早日找到工作,Good Luck!!!

参考文献

本文的代码主要参考以下文章:

[1]destiny_python

[2]女朋友说

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值