题目:
输入一个链表,输出该链表中倒数第k个结点。
思路:
快慢指针
快指针先走k步 然后快慢指针同时走
直到有一个指针指向空
返回慢指针
举个例子:
{1,2,3,4,5} 3
快指针先走三步 指向节点4 此时慢指针在节点1
然后两个指针同时走 当快指针指到节点5的next为null时循环退出
返回慢指针 此时慢指针在节点3
代码展示:
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode* fast= pListHead;
ListNode* slow = pListHead;
int i ;
for ( i = 0;fast != NULL;i++) {
if (i >= k) {
slow = slow->next;
}
fast = fast->next;
}
return i < k ? NULL : slow;
}
};