输入一个链表,输出该链表中倒数第k个结点。
解题思路:定义两个指针——快指针和慢指针。快指针先从头走到第K个节点处,然后快、慢指针同时向后移动,直到快指针走到最后一个节点,此时第二个指针正好是倒数第K个节点
注意:链表可能并没有K个节点,需要进行判断
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL)
};
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode* fast = pListHead;
ListNode* low = pListHead;
ListNode* cur = pListHead;
int length = 0;
while(cur)
{
length++;
cur = cur->next;
}
if(k > length || k <= 0)
return NULL;
for(int i = 0; i < k - 1; i++)
{
fast = fast->next;
}
while(fast->next)
{
fast = fast->next;
low = low->next;
}
return low;
}