第13题(链表):
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
思路一:第一遍找到总长n,算出倒数第k个事哪个,n-k+1个节点
思路二:快慢指针,快的先走k-1步,然后开始一起走,快的到尾部,则慢的就是倒数第k个
ListNode* FindKthFromTail(ListNode* pHead, int k)
{
if(pHead==NULL || k<0) return NULL;
ListNode* pFast = pHead;
ListNode* pSlow = pHead;
for (int i=0;i<k-1;i++)
{
if(pFast->m_pnext!=NULL)
pFast = pFast->m_pnext;
else
return NULL;
}
while (pFast->m_pnext!=NULL)
{
pFast = pFast->m_pnext;
pSlow = pSlow->m_pnext;
}
return pSlow;
}