题目:输入一个结点,输出链表中倒数第k个结点,规定尾结点为倒数第一个结点。
本题相对比较简单,只是要考虑到程序鲁棒性,处理好各种情况才能答得比较好,用双指针法,第一个先走到k-1个结点的时候第二个指针才开始走,等到第一个指针->next为NULL时,第二个指针刚好在倒数第k个位置。
贴出在牛客网上通过的代码:
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if (pListHead == NULL || k == 0)
return NULL;
ListNode* pHead = pListHead;
ListNode* pTail = NULL;
ListNode* ptr = pListHead;
for (int i = 0;i < k - 1;i++)
{
if (pHead->next != NULL){
pHead = pHead->next;
}
else
return NULL;
}
pTail = pListHead;
while (pHead->next != NULL)
{
pHead = pHead->next;
pTail = pTail->next;
}
return pTail;
}
};