我在之前一篇部落格《C實作頭插法和尾插法來建構單連結清單(不帶頭結點)》中具體實作了怎樣使用頭插法和尾插法來建立一個不帶頭結點的單連結清單,可是在實際使用中。我們用的最多的還是帶頭結點的單連結清單。今天我們就來實作一下帶頭結點連結清單的頭插和尾插。
代碼上傳至 https://github.com/chenyufeng1991/HeadInsertAndTailInsert_HeadNode 。
//建立帶頭結點的單連結清單(尾插法)
void CreateListTailInsert(Node *pNode){
/**
* 就算一開始輸入的數字小于等于0,帶頭結點的單連結清單都是會建立成功的。僅僅是這個單連結清單為空而已,也就是裡面除了頭結點就沒有其它節點了。
*/
Node *pInsert;
Node *pMove;
pInsert = (Node *)malloc(sizeof(Node));//須要檢測配置設定記憶體是否成功 pInsert == NULL ?
memset(pInsert, 0, sizeof(Node));
pInsert->next = NULL;
scanf("%d",&(pInsert->element));
pMove = pNode;
while (pInsert->element > 0) {
pMove->next = pInsert;
pMove = pInsert;//pMove始終指向最後一個節點
pInsert = (Node *)malloc(sizeof(Node)); //須要檢測配置設定記憶體是否成功 pInsert == NULL ?
memset(pInsert, 0, sizeof(Node));
pInsert->next = NULL;
scanf("%d",&(pInsert->element));
}
printf("%s函數運作,帶頭結點的單連結清單使用尾插法建立成功\n",__FUNCTION__);
}
//建立帶頭結點的單連結清單(頭插法)
void CreateListHeadInsert(Node *pNode){
Node *pInsert;
pInsert = (Node *)malloc(sizeof(Node));
memset(pInsert, 0, sizeof(Node));
pInsert->next = NULL;
scanf("%d",&(pInsert->element));
while (pInsert->element > 0) {
pInsert->next = pNode->next;
pNode->next = pInsert;
pInsert = (Node *)malloc(sizeof(Node));
memset(pInsert, 0, sizeof(Node));
pInsert->next = NULL;
scanf("%d",&(pInsert->element));
}
printf("%s函數運作,帶頭結點的單連結清單使用頭插法建立成功\n",__FUNCTION__);
}