【程序员面试金典】链表中倒数第k个结点
题目
输入一个链表,输出该链表中倒数第k个结点。
分析
使用两个指针,前面的指针先移动k步,再同时移动两个指针,但前面的指针抵达表尾时输出后面的指针。注意链表为空或链表长度小于k的情况。
解答
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if (pListHead == NULL || k < 0) return NULL;
ListNode *ahead = pListHead;
while (k--)
{
if (ahead == NULL) return NULL;
ahead = ahead->next;
}
while (ahead != NULL)
{
ahead = ahead->next;
pListHead = pListHead->next;
}
return pListHead;
}
};