思路:
1,倒数第k个节点 就是顺数n-k+1个节点,先遍历链表 求出节点数。然后再遍历。这样会遍历两遍链表,不推荐。
2,使用快慢指针,快慢指针同时指向头节点,快指针向后移动k-1步。然后一起向后移,直到快指针指向尾节点,此时慢指针指向的节点就是所求节点
注意:检查参数,考虑节点数小于k的时候
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==NULL||k==0)
return NULL;
ListNode* quick=pListHead;
ListNode* slow=NULL;
for(unsigned int i=0;i<k-1;i++)
{
if(quick->next==NULL)
return NULL;
else
quick=quick->next;
}
slow=pListHead;
while(quick->next!=NULL)
{
quick=quick->next;
slow=slow->next;
}
return slow;
}
};