根據(jù)運(yùn)行的環(huán)境,操作系統(tǒng)可以分為桌面操作系統(tǒng),手機(jī)操作系統(tǒng),服務(wù)器操作系統(tǒng),嵌入式操作系統(tǒng)等。 刪除沒(méi)有頭節(jié)點(diǎn)的單鏈接列表中的特定元素. 一個(gè)非常麻煩的情況是刪除鏈表中的元素,第一個(gè)節(jié)點(diǎn)是要?jiǎng)h除的節(jié)點(diǎn)刪除鏈表中的元素,因此,鏈表的頭通常會(huì)更改,在刪除??功能中,要更改客戶端的頭,必須傳入頭的地址. 否則,客戶的負(fù)責(zé)人將永遠(yuǎn)不會(huì)改變. 也就是說(shuō),如果參數(shù)的類(lèi)型為Node *,則僅修改磁頭的副本. 這是C語(yǔ)言中的基本問(wèn)題. 在我閱讀了郝戈的文章“ Linus: 使用輔助指針刪除單鏈接列表”之后,寫(xiě)了這個(gè)博客. 過(guò)程如下: /******************************************************************** created: 2013/10/06 created: 6:10:2013 0:18 file base: main file ext: c author: Justme0 (http://blog.csdn.net/Justme0) purpose: 在不帶頭結(jié)點(diǎn)的單鏈表中刪除特定元素(C語(yǔ)言描述) *********************************************************************/ #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct Node { ElemType data; struct Node *next; }Node; /* ** 功能 : 刪除鏈表中所有數(shù)據(jù)域?yàn)?x 的結(jié)點(diǎn) ** ppNode : 鏈表的首結(jié)點(diǎn)的地址的地址 */ void list_remove(Node **ppNode, ElemType x) { Node *temp = NULL; // 用于釋放結(jié)點(diǎn) for (; NULL != *ppNode; ) { if ((*ppNode)->data == x) { temp = *ppNode; *ppNode = (*ppNode)->next; printf("remove node: %c\n", temp->data); // free(temp); temp = NULL; } else { ppNode = &((*ppNode)->next); // 成員指針 } } } int main(int argc, char **argv) { Node a = {'b', NULL}; // 鏈尾結(jié)點(diǎn) Node b = {'a', &a}; Node *head = &b; // 指向鏈表的頭指針(不帶頭結(jié)點(diǎn)) list_remove(&head, 'a'); system("pause"); return 0; } 當(dāng)然,在C ++中,您可以使用引用(節(jié)點(diǎn)*&)來(lái)達(dá)到相同的目的. 我認(rèn)為指針和引用的本質(zhì)是相同的.
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!