NewCoder: 输入一个链表,输出该链表中倒数第k个结点

题目来源

https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId

解题思路:快慢指针法解决

  • 判断headk的合法性
  • 先让fastk-1步走到指定位置,然后fast slow两个指针一起走
  • fast指针走到最后一个节点时,slow指针刚好走到倒数第K个节点
    注:需要判断的是fast.next != null,如果判断fast != nullslow最后走到的就是要找的节点的下一个了

图解

在这里插入图片描述
这是还没有开始查找之前的示例链表
在这里插入图片描述
这是找到倒数第K个节点的示例链表
假设要找的是倒数第2个节点<——>即下标为3的节点。
fast先走1步。

实现代码

 class ListNode {
     int val;
     ListNode next = null;

     ListNode(int val) {
         this.val = val;
     }
  }

public ListNode FindKthToTail(ListNode head, int k) {
    //1.判断合法性
    if (head == null ||k <= 0) {
        return null;
    }
    ListNode fast = head;
    ListNode slow = head;
    //2.先让fast走k-1步
    while (k - 1 != 0) {
        if (fast.next != null) {
            fast = fast.next;
            k--;
        } else {
            return null;
        }
    }
    //3.两者一起走
    while (fast.next != null) {

        fast = fast.next;
        slow = slow.next;
    }
    return slow;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值