- 一遍遍历,q指针先走k步,然后p指针和q指针同时向后移动,当q指向链表尾部的时候,p指向倒数第k个节点
- 考虑k大于链表的情况,在第一次q指针向后移动的过程中比较i和k的值,q已经到达了终点这时候的i仍然比k-1要小说明k大于链表的长度,返回NULL。
class Solution {
public:
ListNode* findKthToTail(ListNode* pListHead, int k) {
auto p = pListHead, q = pListHead;
for (int i = 0; i < k; i++) {
if (q) q = q->next;
if (!q && i < k - 1) return NULL;
}
while (q) {
q = q->next;
p = p->next;
}
return p;
}
};