题目来源

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

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

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

图解

NewCoder: 输入一个链表,输出该链表中倒数第k个结点
这是还没有开始查找之前的示例链表
NewCoder: 输入一个链表,输出该链表中倒数第k个结点
这是找到倒数第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;
}

相关文章: