链表倒数第 k 个节点

版权声明: https://blog.csdn.net/qq_41880190/article/details/83650980
#include <iostream>
struct ListNode
{
    int m_nValue;
    ListNode* m_pNext;
};
/* 查找链表倒数第 k 个结点 */
ListNode* FindKthToTail(ListNode* pHead, unsigned int k)
{
    if(pHead == NULL || k == 0)
    {
        return NULL;
    }
    ListNode* pAhead = pHead;   //定义快指针 pAhead 让其先走 k - 1 步
    ListNode* pBehind = NULL;   
    /*定义慢指针 pBehind 当快指针走完 k - 1 步时
     * 二者一起走,到快指针的下一个指针为空时停止*/
    for(unsigned int i = 0; i < k - 1; ++i)
    {
        if(pAhead->m_pNext != NULL)
        {
            pAhead = pAhead->m_pNext;
        }
        else
        {
            return NULL;
        }
    }//k小于链表节点数目,否则返回 NULL
    pBehind = pHead;    //  慢指针从头开始走
    while(pAhead->m_pNext != NULL)
    {
        pAhead = pAhead->m_pNext;
        pBehind = pBehind->m_pNext;
    }
    return pBehind;
}
int main()
{
    std::cout << "Hello world" << std::endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41880190/article/details/83650980