
推荐: C语言删除无环双链列表节点(前导节点和尾部节点)
我在以前的博客“无循环双链表节点删除的C语言实现(无前导节点)”中详细解释了删除双链表中没有头节点和尾节点的节点,处理过程仍然很少麻烦. 自从我们
2020年腾讯云“ 6.18”活动开始! ! ! (再次出现巨大折扣!4核8G,5M带宽1999元/ 3年),

地址:
2020年阿里云的最低价格产品入口,包括优惠券(新老用户均可享受折扣)
地址:

单链列表节点的添加,删除和修改是最基本的操作. 该博客将实现节点的删除. 有关其他操作,请参阅博客“ C语言链接列表的基本操作”. 删除节点有两种类型:
(1)删除i某个位置上的节点;
(2)确定x的值是否在链表中,如果存在该节点,则将其删除;

推荐: C语言-创建单链表,查找长度,查找前驱节点,删除节点
#include
示例代码已上传到.

核心代码如下:
//删除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语言中单个链接列表的基本操作”中不带头结点的单链表不带头结点的单链表,我意识到了如何清空单个链接列表. 现在,它被双向非循环链表取代. 总体思路是相同的. 该代码已上传到:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-224710-1.html
美帝是不是太无耻了
有种时尚大片的赶脚~