剑指offer 22. 链表中倒数第k个节点
题目描述
解题思路
主要注意鲁棒性问题:
- k <= 0
- 头指针为空
- k 比链表长度还要大
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
if (head == null || k <= 0) return null;
ListNode fast = head, slow = head; //快慢指针
//快指针一共走 k步
while (k > 0) {
if (fast == null) return null; //如果快指针还没走完 k 步,非法,直接返回
fast = fast.next;
k--;
}
//快慢指针同时移动,当快指针指向null时,慢指针刚好指在倒数第k的位置
while (fast != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}