連結串列倒數第 k 個節點
阿新 • • 發佈:2018-11-24
#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; }