题目描述
输入一个链表,输出该链表中倒数第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) {
ListNode *fast =pListHead;
ListNode *slow = pListHead;
int i = 0;
for ( ; (fast!=NULL) && (i < k ); ++i)
{
fast = fast->next;
}
if (i == k )
{
while (fast != NULL)
{
fast = fast->next;
slow = slow->next;
}
return slow;
}
else
return NULL;
}
};