🚩传送门:牛客题目

题目

一个长度为 n 的链表,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回null
进阶:空间复杂度 [NC]69. 链表中倒数最后k个结点 - 图1,时间复杂度 [NC]69. 链表中倒数最后k个结点 - 图2

例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示:[NC]69. 链表中倒数最后k个结点 - 图3
其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。

时间复杂度

时间复杂度:[NC]69. 链表中倒数最后k个结点 - 图4,其中 [NC]69. 链表中倒数最后k个结点 - 图5 为链表的长度,需要遍历一次。

空间复杂度:[NC]69. 链表中倒数最后k个结点 - 图6,使用常量的空间。

🚩官方代码

  1. public class Solution {
  2. public ListNode FindKthToTail (ListNode pHead, int k) {
  3. ListNode first=pHead;
  4. // 1. 先走 k 个结点
  5. for(int i=0;i<k;i++){
  6. if(first==null){
  7. return null;
  8. }
  9. first=first.next;
  10. }
  11. // 2. 接着再走到结尾
  12. ListNode last=pHead;
  13. while(first!=null){
  14. first=first.next;
  15. last=last.next;
  16. }
  17. return last;
  18. }
  19. }