我在之前一篇博客《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__);
}
