输入一个链表,输出该链表中倒数第k个结点。
解决思路:
- 定义两个快慢指针fast,slow
- 倒数第k个节点就是让fast节点先走K - 1步
- 如果fast还没走k - 1步,fast.next就是空,那就不存在要找的节点
- 然后两个同时往后走,当fast.next为空的时候就走到链表尾
- slow就是倒数第k个节点
public ListNode FindKthToTail(ListNode head,int k) {
//如果头节点为空就直接return
if (head == null) {
return null;
}
//定义快慢节点
ListNode fast = head;
ListNode slow = head;
//快的走n-1步
while (k-1 != 0) {
//还没走n-1步呢,就是空,那就是不存在
if (fast.next != null) {
//fast先走k-1步
fast = fast.next;
k--;
}else {
return null;//这个节点不存在
}
}
//此时fast和slow一起走,fast.next == null的时候,slow就是倒数第k个节点
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}