記住頭元素:
單向鍊錶的頭元素必須至始至終要記住,否則鍊錶將會在記憶體中丟失。這意味著在鍊錶第乙個元素之前插入新元素或刪除鍊錶第乙個元素時,指向煉表頭的指標或引用必須更新。
在c/c++中,很容易因誤用指標而犯錯誤,如下面**,它在鍊錶的前面插入乙個元素:
bool
insertinfront(intelement *head,
intdata)
上面的**是不正確的,因為它只更新了頭指標的「本地拷貝」。正確的版本是傳入乙個頭元素指標的指標:
bool
insertinfront(intelement **head,
intdata)
當然,在c++中,頭指標也可以通過引用來傳遞。
刪除單個元素:
bool
deleteelement(intelement **head, intelement *deleteme)
while
(elem)
elem = elem->next; }
return
false;
} 刪除鍊錶中的所有元素:
void
deletelist(intelement **head)
*head = null;
}
程式設計之美 無頭鍊錶刪除節點
問題描述 乙個沒有頭指標的鍊錶,從其中刪除任意乙個中間節點 非第乙個,也不是最後乙個 思路 因為當前節點是要被刪除的,所以當前節點的值已經不需要被儲存了,可以直接用下乙個節點的值將其替換。然後,直接刪除下乙個節點即可。void delete node stnode target p target t...
《演算法之美》 鍊錶問題 判斷鍊錶迴圈與否
問題 乙個鍊錶要麼以null結尾 非迴圈的 要麼以迴圈結尾 迴圈的 請編寫乙個函式,接受鍊錶的頭指標作為引數,確定該鍊錶是迴圈的還是非迴圈的。如果鍊錶是迴圈的,函式返回true,如果是非迴圈的,函式返回false。注意,不能以任何方式修改鍊錶。解答 這兩種鍊錶的區別在與它們的末尾。在非迴圈鍊錶中,末...
程式設計之美 從無頭鍊錶中刪除結點
乙個無頭單鏈表中,乙個指標指向此單鏈表中間的乙個結點 不是第乙個結點,也不是尾結點 請將該結點刪除。思想 在不知道第一結點情況下,這個問題看起來無從下手。但是我們知道要刪除結點的資訊,以及要刪除結點的下一結點資訊以及下下個結點資訊。知道這些,我們可以知道可以較容易刪除要刪除結點的下一結點。如何將問題...