题目描述
输入一个链表,输出该链表中倒数第 k k k个结点。
个人思路:让一个指针先走 k − 1 k - 1 k−1步,到达第 k k k个节点,然后第二个指针指向头节点,让两个指针同时出发,当第一个指针到达节点末尾时,此时第二个指针刚好指向倒数第 k k k个节点
(两个指针相差的距离一直为 k k 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 == nullptr || k == 0)
return nullptr;
ListNode* pAHead = pListHead;
ListNode* pBHead = nullptr;
//第一个指针先走k - 1步
for (unsigned int i = 0; i < k - 1; ++i) {
if (pAHead->next != nullptr)
pAHead = pAHead->next;
else
return nullptr;
}
//第二个指针指向头节点
pBHead = pListHead;
//然后同时出发
while (pAHead->next != nullptr) {
pAHead = pAHead->next;
pBHead = pBHead->next;
}
return pBHead;
}
};