【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】
前面的部落格中,我們曾經有一篇專門講到單向連結清單的内容。那麼今天讨論的連結清單和上次讨論的連結清單有什麼不同呢?重點就在這個"循環"上面。有了循環,意味着我們可以從任何一個連結清單節點開始工作,可以把root定在任何連結清單節點上面,可以從任意一個連結清單節點通路資料,這就是循環的優勢。
那麼在實作過程中,循環單向連結清單有什麼不同?
1)列印連結清單資料
以往,我們發現列印資料的結束都是判斷指針是否為NULL,這裡因為是循環連結清單是以發生了變化。原來的條件(NULL != pLinkNode)也修改成了這裡的(pLinkNode != pIndex)。同樣需要修改的函數還有find函數、count統計函數。
2)插入資料
這裡的insert函數在兩個地方發生了變化:
a)如果原來連結清單中沒有節點,那麼連結清單節點需要自己指向自己
b)如果連結清單節點原來存在,那麼隻需要在目前的連結清單節點後面添加一個資料,同時修改兩個方向的指針即可
3) 删除資料
和添加資料一樣,删除資料也要在兩個方面做出改變:
a)如果目前連結清單節點中隻剩下一個資料的時候,删除後需要設定為NULL
b)删除資料的時候首先需要目前資料的前一個資料,這個時候就可以從目前删除的資料開始進行周遊
c) 删除的時候需要重點判斷删除的資料是不是連結清單的頭結點資料
【預告: 下一篇部落格介紹單向連結清單的反轉】