1. 程式人生 > >連結串列倒數第 k 個節點

連結串列倒數第 k 個節點

#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;
}