天天看點

一步一步寫算法(之循環單向連結清單)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。  聯系信箱:feixiaoxing @163.com】

    前面的部落格中,我們曾經有一篇專門講到單向連結清單的内容。那麼今天讨論的連結清單和上次讨論的連結清單有什麼不同呢?重點就在這個"循環"上面。有了循環,意味着我們可以從任何一個連結清單節點開始工作,可以把root定在任何連結清單節點上面,可以從任意一個連結清單節點通路資料,這就是循環的優勢。

    那麼在實作過程中,循環單向連結清單有什麼不同?

    1)列印連結清單資料

    以往,我們發現列印資料的結束都是判斷指針是否為NULL,這裡因為是循環連結清單是以發生了變化。原來的條件(NULL != pLinkNode)也修改成了這裡的(pLinkNode != pIndex)。同樣需要修改的函數還有find函數、count統計函數。

    2)插入資料

這裡的insert函數在兩個地方發生了變化:

    a)如果原來連結清單中沒有節點,那麼連結清單節點需要自己指向自己

    b)如果連結清單節點原來存在,那麼隻需要在目前的連結清單節點後面添加一個資料,同時修改兩個方向的指針即可

    3) 删除資料

和添加資料一樣,删除資料也要在兩個方面做出改變:

    a)如果目前連結清單節點中隻剩下一個資料的時候,删除後需要設定為NULL

    b)删除資料的時候首先需要目前資料的前一個資料,這個時候就可以從目前删除的資料開始進行周遊

    c) 删除的時候需要重點判斷删除的資料是不是連結清單的頭結點資料

【預告: 下一篇部落格介紹單向連結清單的反轉】

繼續閱讀