C語言實現有序單鏈表的插入

來源:互聯網
上載者:User

        在單鏈表中,每個節點包含一個指向鏈表下一節點的指標。鏈表最後一個節點的指標欄位的值為NULL,提示鏈表後面不再有其它節點。在你找到鏈表的第1個節點後,指標就可以帶你訪問剩餘的所有節點。為了記住鏈表的起始位置,可以使用一個根指標(root pointer),根指標指向鏈表的第1個節點。注意,根指標只是一個指標,它不包含任何資料。 下面就是一張有序單鏈表的圖:

   

        我們先來聲明本文示範所用的鏈表的節點:

        那麼,怎麼才能無誤地把一個新節點插入到一個有序的單鏈表中呢? 首先,我們應該知道,把一個節點插入到一個有序單鏈表會有三種可能的情況出現:分別是插入點在鏈表的頭部、中間以及尾部。實現插入的演算法並不複雜,通常用一般的程式設計語言來實現的話,代碼如下:        這個函數可以正確完成任務,而且在許多語言中,這是能夠獲得的最佳方案。但是,我們還可以做得更好一些,因為C允許我們獲得現存對象的地址。        看起來,把一個節點插入到鏈表的起始位置必須作為一種特殊情況進行處理。畢竟,我們此時插入新節點需要修改的指標是根指標。對於任何其他節點,對指標進行修改時實際修改的是前一個節點的link欄位。這兩個看上去不同的操作實際上是一樣的。消除特殊情況的關鍵在於:我們必須認識到,鏈表中的每個節點都有一個指向它的指標。對於第1個節點,這個指標是根指標;對於其他節點,這個指標是前一個節點的link欄位。重點在於每個節點都有一個指標指向它。至於該指標是不是位於一個節點的內部則無關緊要。所以,用C語言實現有序單鏈表的插入函數(最終版)的代碼如下:        一開始,current被設定為指向鏈表的第1個節點。while迴圈測試我們是否到達了鏈表的尾部。如果沒有,它接著檢查我們是否到達了正確的插入位置。如果不是,迴圈體繼續執行,並把linkp設定為指向當前節點link欄位,並使current指向下一個節點。在while運算式中,嵌入了current的賦值以消除current的冗餘賦值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.