b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C语言可实现单链列表节点(无前导节点)的删除

电脑杂谈  发布时间:2020-05-28 02:18:43  来源:网络整理

不带头结点的单链表_二叉树的叶子结点连成链表_带头结点的双循环链表

推荐: C语言删除无环双链列表节点(前导节点和尾部节点)

我在以前的博客“无循环双链表节点删除的C语言实现(无前导节点)”中详细解释了删除双链表中没有头节点和尾节点的节点,处理过程仍然很少麻烦. 自从我们

2020年腾讯云“ 6.18”活动开始! ! ! (再次出现巨大折扣!4核8G,5M带宽1999元/ 3年),

二叉树的叶子结点连成链表_不带头结点的单链表_带头结点的双循环链表

地址:

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

地址:

不带头结点的单链表_带头结点的双循环链表_二叉树的叶子结点连成链表

单链列表节点的添加,删除和修改是最基本的操作. 该博客将实现节点的删除. 有关其他操作,请参阅博客“ C语言链接列表的基本操作”. 删除节点有两种类型:

(1)删除i某个位置上的节点;

(2)确定x的值是否在链表中,如果存在该节点,则将其删除;

二叉树的叶子结点连成链表_带头结点的双循环链表_不带头结点的单链表

推荐: C语言-创建单链表,查找长度,查找前驱节点,删除节点

#include #include // malloc需要此头文件//定义一个单链列表节点结构typedef int ElemType; typedef struct Node {ElemType data; struct Nod

示例代码已上传到.

二叉树的叶子结点连成链表_带头结点的双循环链表_不带头结点的单链表

核心代码如下:

//删除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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 赵玉萍
        赵玉萍

        有种时尚大片的赶脚~

      • 林方园
        林方园

        美帝是不是太无耻了

      热点图片
      拼命载入中...