快慢指针法,快指针先走k-1步,然后慢指针再走,当快指针为空时,慢指针指向的就是倒数第k个节点。
当k大于链表的长度时,我们可以在快指针先走的过程中加个判断,如果越界了,肯定会存在快指针指向链表末尾的NULL的,此时我们就返回一个NULL回去即可。
代码实现
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
struct ListNode* slow = pListHead;
struct ListNode* fast = slow;
while(k--)
{
if(fast)
fast = fast->next;
else
return NULL;
}
while(fast)
{
slow = slow->next;
fast = fast->next;
}
return slow;
}
};