解法一
一次遍历得出结点个数,二次遍历返回正数第n-k个结点。一般思路,此处不再赘述。
解法二
快慢指针
- fast 指针先走k步
- slow 和 fast 指针一起走,当fast == NULL时, slow指向倒数第k个结点。
初始条件
fast先走k步
fast 和 slow一起走结束状态
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
struct ListNode* fast, *slow;
fast = slow = pListHead;
for(int i = 0; i < k; i++) {
if(fast == NULL) {
return NULL;
}
fast = fast->next;
}
while(fast) {
slow = slow->next;
fast = fast->next;
}
return slow;
}