C语言实现单链表节点的删除(带头结点)
程序员文章站
2022-06-22 11:55:45
我在之前一篇博客《c语言实现单链表节点的删除(不带头结点)》中详细实现了如何在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表。
删除类型有两种:
(1)删除某个位置po...
我在之前一篇博客《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; }