/*思路不难:
1、当head == null时,链表为空,不存在倒数第k个节点,返回null
2、首先先解决k不满足时的情况:
①:当k<=0,在链表中找不到倒数第k的位置,返回null
②:或者k>链表长度时,超出链表长度,找不到倒数第k个节点,返回null
在②这一步之前,先定义一个cur指向head,cnt = 0;cur从头遍历到链表为null为止,算出链表的长度cnt
3、定义两个fast slow两个节点,同时指向head节点
第①步:先让fast先走 k-1 步
第②步:这是一个比较巧妙的过程,slow指向head不走,fast先走 k-1 步;然后fast和slow同时向前走,当fast.next ==null时,此时的slow位置就是倒数第k位置了,
*/
import java.util.List;
/**
* Created with IntelliJ IDEA.
* Description:
*输入一个链表,输出该链表中倒数第k个结点。
* 如果该链表长度小于k,请返回空。
* 示例1
* 输入
* {1,2,3,4,5},1
* 返回值
* {5}
* @User:Mingaho
* @Date:2021/04/29
* @Time:10:52
*/
class Node {
public int val;
public Node next;
public Node(int val) {
this.val = val;
}
}
public class Main14 {
public Node FindKthToTail (Node head, int k) {
if(head == null) {
return null;
}
int cnt = 0;
Node cur = head;
while(cur != null) {
cnt++;
cur = cur.next;
}
if(k <= 0 || k > cnt) {
return null;
}
Node fast = head;
Node slow = head;
while (k - 1 > 0) {
fast = fast.next;
k--;
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}