设置两个指针,快指针先行遍历k次,然后在同慢指针同步遍历。当快指针抵达链表尾部时,慢指针所指位置即链表中倒数第k个结点。遍历期间,要注意快指针先到达链表尾部的情况。
具体代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* findKthToTail(ListNode* pListHead, int k) {
ListNode *p = pListHead, *q = pListHead;
for(int i = 0; i < k; i++){
if(!p) return NULL;
p = p -> next;
}
while(p){
p = p -> next;
q = q -> next;
}
return q;
}
};