我在之前一篇博客《C語言實現單鏈表節點的刪除(不帶頭結點)》中詳細實現了如何在一個不帶頭結點的單鏈表的刪除一個節點,在這一篇博客中我改成了帶頭結點的單鏈表。
刪除類型有兩種:
(1)刪除某個位置pos的節點;
(2)判斷x值是否在鏈表中,若存在則刪除該節點;
核心代碼如下:
//刪除某個位置pos的節點 Node *DeletePosNode(Node *pNode,int pos){ int i = 1; Node *pMove; Node *pMovePre; pMovePre = pNode; pMove = pNode->next; while (pMove != NULL) { if (i == pos) { pMovePre->next = pMove->next; free(pMove); pMove = NULL; printf("%s函數執行,在pos=%d位置刪除節點成功\n",__FUNCTION__,pos); return pNode; } i++; pMovePre = pMovePre->next; pMove = pMove->next; } printf("%s函數執行,在pos=%d位置刪除節點失敗\n",__FUNCTION__,pos); return pNode; } //判斷x值是否在鏈表中,若存在則刪除該節點 Node *DeleteValueNode(Node *pNode,int x){ Node *pMovePre; Node *pMove; pMovePre = pNode; pMove = pNode->next; while (pMove != NULL) { if (pMove->element == x) { pMovePre->next = pMove->next; free(pMove); pMove = NULL; printf("%s函數執行,刪除value=%d節點成功\n",__FUNCTION__,x); return pNode; } pMovePre = pMovePre->next; pMove = pMove->next; } printf("%s函數執行,刪除value=%d節點失敗\n",__FUNCTION__,x); return pNode; }