c语言 链表 删除节点,C语言实现单链表节点的删除(不带头结点)
對單鏈表節點進行增刪改查是最基本的操作,這篇博客將會來實現對節點的刪除。其他的操作可參考《C語言實現鏈表的基本操作》這篇博客。刪除某個節點有兩個類型:
(1)刪除i某個位置的節點;
(2)判斷x值是否在鏈表中,若存在則刪除該節點;
實例代碼已經上傳至 https://github.com/chenyufeng1991/DeleteLinkedList?。
核心代碼如下:
//刪除pos位置的節點
Node *deletePosElement(Node *pNode,int pos){
//需要一個頭結點來維護
Node *pHead;
Node *pMove;
int i = 1;
if (pos <= 0 || pos > sizeList(pNode)) {
printf("%s函數執行,輸入pos值非法,刪除節點失敗\n",__FUNCTION__);
return NULL;
}
pHead = pNode;
pMove = pNode;
//單獨考慮刪除第一個節點
if (pos == 1) {
pMove = pMove->next;
pNode = pMove;
free(pHead);
printf("%s函數執行,刪除pos=1位置元素成功\n",__FUNCTION__);
return pNode;
}
while (pMove != NULL) {
if (i == pos - 1) {
break;
}
i++;
pMove = pMove->next;
}
free(pMove->next);
pMove->next = pMove->next->next;
printf("%s函數執行,刪除pos=%d位置元素成功\n",__FUNCTION__,pos);
return pNode;
}
//判斷x值是否在鏈表中,若存在則刪除該節點
Node *deleteXElement(Node *pNode,int x){
//一前一后兩個指針,pMovePre是pMove的前一個節點
Node *pMovePre;
Node *pMove;
if (pNode == NULL) {
printf("%s函數執行,鏈表為空,刪除x=%d失敗\n",__FUNCTION__,x);
return NULL;
}
pMovePre = pNode;
pMove = pMovePre->next;
//單獨考慮第一個節點
if (pMovePre->element == x) {
pNode = pMove;
free(pMovePre);
return pNode;
}
while (pMove != NULL) {
if (pMove->element == x) {
//找到該節點的前一個節點
pMovePre->next = pMove->next;
free(pMove);
break;
}
//同步前進
pMove = pMove->next;
pMovePre = pMovePre->next;
}
if (pMove == NULL) {
printf("%s函數執行,不存在x=%d,刪除數據失敗\n",__FUNCTION__,x);
return pNode;
}
printf("%s函數執行,刪除x=%d成功\n",__FUNCTION__,x);
return pNode;
}
總結
以上是生活随笔為你收集整理的c语言 链表 删除节点,C语言实现单链表节点的删除(不带头结点)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言两班平均成绩,两班工人的平均日产量
- 下一篇: c语言二次函数拟合,二次函数拟合算法