思路
- 遍历一遍获得链表长度,取出n-k+1个节点的数据域
- 定义快慢指针,快的先走K-1步。
易错点
倒数第k个,与倒数第一个pHead->next==nullptr的节点相差k-1,而不是k
源码
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==nullptr||k==0)
return nullptr;
ListNode* pHead=pListHead;
ListNode* pAfter=pListHead;
for(int i=0;i<k-1;i++)//注意:倒数第k个,与倒数第一个pHead->next==nullptr的节点相差k-1
{
if(pHead->next!=nullptr)
pHead=pHead->next;
else
return nullptr;
}
while(pHead->next!=nullptr)
{
pHead=pHead->next;
pAfter=pAfter->next;
}
return pAfter;
}
};