03 链表的删除:删除链表中与目标值相等的元素(Linked List 链表)

2023-11-13

采用C语言完整实现。

原链表为1->2->3,现在要删除与目标值2相等的元素,删除后,链表变为1->3。

#include <stdio.h>
#include <stdlib.h>
#include <MacTypes.h>

/*定义节点*/
typedef struct Node {
    int data;
    struct Node *next;
} LinkedList;

/*使用头插法来构建一个链表*/
void push(struct Node **head_ref, int new_data);

/*给一个指针的指针作为引用,作为这个链表的头指针,进行删除指定位置的节点*/
void deleteNode(struct Node **head_ref, int position);

/*打印链表*/
void printList(LinkedList *node);

int main() {
    LinkedList *head_ref = NULL;
    //注意这里要传取地址符
    push(&head_ref, 3);
    push(&head_ref, 4);
    push(&head_ref, 5);
    deleteNode(&head_ref,2);
    printList(head_ref);
    return 0;
}

/*
 * 头插法的几步
 * 1.定义一个新的指针,给指针申请空间,使其变成一个新的节点。
 * 2.给这个新的节点data数据域赋值。
 * 3.将这个新的节点的next指针指向原来的开始节点(原头指针指向的节点)
 * 4.将原头指针左移移动到新的节点
 */
void push(struct Node **head_ref, int new_data) {

    LinkedList *new_node = (LinkedList *) malloc(sizeof(LinkedList));
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}

/*从给定节点往后打印链表*/
void printList(LinkedList *node) {
    //节点不为空,循环
    while (node != NULL) {
        //打印节点值
        printf(" %d \n", node->data);
        //指针后移
        node = node->next;
    }
}

/*删除指定位置的的节点*/
void deleteNode(struct Node **head_ref, int position) {

    //1.首先判断这个链表是否为空
    if (*head_ref == NULL) {
        return;
    }

    //2.创建一个指针存储头节点
    struct Node *temp = *head_ref;

    //3.如果这个position是0,那么直接移除掉头节点
    if (position == 0) {
        *head_ref = temp->next;
        free(temp);
        return;
    }

    //4.从头节点遍历,找到删除位置position的前驱节点,temp指向前驱
    for (int i = 0; temp != NULL && i < position - 1; ++i) {
        temp = temp->next;
    }

    //5.如果这个位置比链表还长
    if (temp == NULL || temp ->next == NULL){
        return;
    }

    //6.创建一个新的指针指向将要删除的节点的下一个节点
    //temp是删除节点的前驱
    //temp->next 这个节点是即将被删除的节点
    struct Node *next = temp->next->next;
    //7.删除节点
    free(temp->next);

    //8.将next节点连接在前驱节点temp后面
    temp->next=next;

}

输出:

 3  2  1  3  1 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

03 链表的删除:删除链表中与目标值相等的元素(Linked List 链表) 的相关文章

随机推荐

  • Sequence Modeling: Recurrent and Recursive Nets(3)

    CONTENTS Leaky Units and Other Strategies for Multiple Time Scales One way to deal with long term dependencies is to des
  • I2C软件模拟中的IO方向设置问题

    例程 STM32F103系列 I2C软件模拟实验 战舰例程 问题 下面两行关于 IO方向 的代码不太明白 之前一直看的例程都是库函数的代码 突然间冒出来两行寄存器的代码一时间手足无措 define SDA IN GPIOB gt CRL 0
  • Linux安装docker,在docker上安装mysql

    一 linux安装docker 1 下载安装包 下载地址 Index of linux centos 7 x86 64 stable Packages 我用的操作系统是centos7 根据自己操作系统找到相应版本下载 2 上传安装包 我用的
  • Docker学习笔记(三)-编写自己的Dockerfile

    Dockerfile是什么 Dockerfile用于快速创建自定义的Docker镜像 在上一篇博客中我们知道常见的三种创建image的手法 一般情况我们可以通过在基础镜像的基础上通过docker commit的方式生成新的image 但是对
  • IDEAweb项目文件夹没有蓝色小点

    问题原因 idea没有识别web文件夹为一个web项目 解决方案 需要手动选中该moudle 主动add web文件夹即可
  • centos7 kvm 设置桥接网卡br0

    centos kvm 设置桥接网卡br0 一 关于kvm的操作 1 查看CPU是否支持VT egrep vmx svm color always proc cpuinfo 2 检查内核模块是否加载 lsmod grep kvm 3 查看Se
  • Java的垃圾回收机制简述

    Java垃圾回收机制简述 一 由谁来做 Java的垃圾回收是由JVM Java虚拟机 来做的 二 什么时候做 1 CPU空闲的时候 自动进行回收 2 在堆内存存储满了之后 自动进行回收 3 程序调用System gc 主动尝试进行回收 三
  • Docker目录迁移

    问题 系统 根目录空间满 导致docker容器停用 df lh 显示已占用100 而 home目录还有1T空间未用 需求 将docker目录移动到 home目录 docker默认位置 var lib docker 查看Docker目录 do
  • STM32------ADC(模/数转换器)

    文章目录 前言 一 ADC定义 二 模拟信号 三 数字信号 四 模数转换的过程 五 特性 六 硬件电路 1 原理图 2 可调电阻用到的引脚 3 不同的引脚支持的ADC是不一样的 4 存储对齐方式 七 思考题 八 源码下载 总结 前言 STM
  • LeetCode题目笔记——1233. 删除子文件夹,写法妙哉妙哉

    文章目录 题目描述 题目难度 中等 方法一 排序 代码 C 代码 Python 方法二 字典树 总结 题目描述 你是一位系统管理员 手里有一份文件夹列表 folder 你的任务是要删除该列表中的所有 子文件夹 并以 任意顺序 返回剩下的文件
  • 记录“conda添加清华镜像源”问题--查看添加删除

    conda查看添加加删除清华镜像源 一 查看镜像源 二 添加新镜像源 三 删除旧镜像源 四 切回默认源 一 查看镜像源 查看conda镜像源的命令有两个 1 conda info 镜像源显示在channel URLs属性中 2 conda
  • 简述gitee使用及创建仓库及远程连接

    第一步 找到gitee网址 进入 Gitee 基于 Git 的代码托管和研发协作平台 第二步 点击右上角注册按钮 第三步 登录 第四步 点击右上角加号图标 下拉菜单的新建仓库 第五步 新建仓库 取一个仓库名 点击创建按钮 第六步 跳转至新建
  • Javascript制作简易计算器并实现其功能

    使用JS的函数功能 制作一个简易的计算器 包括加 减 乘 除的功能 并使用函数传参的方式完成计算器的功能 输入任意操作数 通过四则运算计算出结果 使用函数传参的方式完成计算器的功能 CSS部分
  • 至少有一位重复数字--动态规划

    leetcode 1012 至少有一位重复的数字 题目描述 给定正整数 N 返回小于等于 N 且具有至少 1 位重复数字的正整数的个数 示例1 输入 20 输出 1 解释 具有至少 1 位重复数字的正数 lt 20 只有 11 示例2 输入
  • python大数据分析代码案例

    查询用户余额代码案例 import sys import MySQLdb import pandas as pd optmap dbuser aduser dbpass 123654 dbhost 192 168 10 14 dbport
  • vite打包报错解决

    在tsconfig json中添加skipLibCheck true 已解决问题 请参考配置 compilerOptions target esnext useDefineForClassFields true module esnext
  • 【VS2010学习笔记】【错误调试】error LNK1123:转换到COFF期间失败;文件无效或者损坏

    在调试串口通信程序的过程中 将以前能够成功运行的程序在电脑上重新运行的时候 出现下面的错误 如下图所示 解决方法 连接器LNK是通过调用cvtres exe完成文件向coff格式的转换的 所以出现这种错误的原因就是cvtres exe出现了
  • 作为一名数据分析师,都需要掌握哪些工具?

    在身边偶尔会听到别人说做数据分析师 工具不是很重要 重要的是那些软实力 其实这一点我并不敢苟同 俗话说工欲善其事必先利其器 所以工具用的好 其实是可以极大的提升工作效率的 那么作为一名数据分析师 都需要掌握哪些工具呢 这里先列出使用频率最高
  • Photoshop神器插件Alpaca安装与使用指南

    Alpaca是一款Photoshop的插件 它可以自动生成各种图片 大大提高我们的工作效率 今天就为大家介绍如何安装和使用Alpaca这个好用的插件 一 下载并安装Alpaca 在Chrome浏览器中打开Alpaca的官网 点击join a
  • 03 链表的删除:删除链表中与目标值相等的元素(Linked List 链表)

    采用C语言完整实现 原链表为1 gt 2 gt 3 现在要删除与目标值2相等的元素 删除后 链表变为1 gt 3 include