BM8. [链表中倒数最后k个结点]

alt

https://www.nowcoder.com/exam/oj?tab=%E7%AE%97%E6%B3%95%E7%AF%87&topicId=295

BM8. 链表中倒数最后k个结点

https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9?tpId=295&sfm=github&channel=nowcoder

题目分析

这个题目也是一个快慢指针问题,就是先让快指针走k步,然后快指针拉着慢指针一起走,需要判断k是否会超出数组的长度。

alt

做法分析

定义快指针fast,和慢指针slow,快指针先走K步

ListNode fast = pHead;
ListNode slow = pHead;
while(k > 0 && fast != null){
    fast =  fast.next;
    k--;
}

额外判断一种情况,就是给出的k是大于链表长度,这样fast已经是null,但是k不为0,所以直接返回null即可

if(fast == null && k != 0)
    return null;

最后快慢指针同时向后遍历,那么最后的慢指针就应该是链表中倒数第K个节点

while(fast != null){
    fast = fast.next;
    slow = slow.next;
}
return slow;

完整题解

  public ListNode FindKthToTail(ListNode pHead, int k) {
    ListNode fast = pHead;
    ListNode slow = pHead;
    while (k > 0 && fast != null) {
      fast = fast.next;
      k--;
    }
    if (fast == null && k != 0)
      return null;
    while (fast != null) {
      fast = fast.next;
      slow = slow.next;
    }
    return slow;
  }

复杂度分析
时间复杂度:, slow指针走过的距离不会超过链表的总长度,所以时间复杂度是

空间复杂度:没有使用额外的空间

alt

#面经##题解##面试题目#
全部评论

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
美团 后端开发 总包n(15%是股票)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务