Chapter07 連結串列(下):如何輕鬆學出正確的連結串列程式碼?
技巧一:理解指標或引用的含義
技巧二:指標丟失和記憶體洩漏
技巧三:利用哨兵簡化實現難度
技巧四:重點留意邊界條件處理
如果連結串列未空時,程式碼是否能夠正常執行
如果連結串列只包含一個節點時,程式碼能否正常執行
如果連結串列只包含兩個節點時,程式碼能否正常執行
程式碼邏輯在處理頭節點和尾節點的時候,能否正常執行
技巧五:舉例畫圖
技巧六:多謝多練,沒有捷徑
單鏈表反轉
Node* List::ReversalList()
{
Node* pPreNode = NULL;
Node* pNextNode = NULL;
Node* pCurrentNode = pHead;
while(pCurrentNode != NULL)
{
pNextNode = pCurrentNode->pNext;
if(pNextNode == NULL)
{
pHead = pCurrentNode;
}
pCurrentNode->pNext = pPreNode;
pPreNode = pCurrentNode;
pCurrentNode = pNextNode;
}
return pHead;
}
連結串列中環的檢測
//fast slow pointer function
bool List::IsRecircleList()
{
Node *pSlow,*pFast;
pSlow = pFast = pHead;
while(pSlow != NULL && pFast->pNext->pNext != NULL)
{
pSlow = pSlow->pNext;
pFast = pFast->pNext->pNext;
if(pSlow == pFast)
return true;
}
return false;
}
兩個有序連結串列的合併
刪除連結串列倒數第
求連結串列的中間節點