题目
输入一个链表,输出该链表中倒数第k个结点。
暴力解法
很多种,先遍历一遍,统计链表的长度,让后找正数的第n-k-1
个节点。
快慢指针
使用两个指针,fast和slow,fast比slow快k步,则当fast走到尽头的时候,slow所处的位置就是倒数第k个节点所处的位置
public class Solution {
public ListNode FindKthToTail(ListNode head, int k) {
if (k < 0)
return null;
ListNode fast, slow;
fast = slow = head;
// go before `k` step
for (int i = 0; i < k; i++) {
if (fast == null)
return null;
fast = fast.next;
}
// go with `fast`
while (fast != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}