1. 程式人生 > >Chapter07 連結串列(下):如何輕鬆學出正確的連結串列程式碼?

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;

}

兩個有序連結串列的合併

刪除連結串列倒數第

n個節點

求連結串列的中間節點