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 链表) 的相关文章

  • 为什么 std::vector 可以处理类定义中的不完整类型?

    出现了以下问题 C 标准似乎说 std vector需要一个完整的类型才能工作 看https en cppreference com w cpp container vector https en cppreference com w cp
  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • C++中类成员函数相互调用有什么好处?

    我是 C 新手 我发现下面的编程风格对我来说很有趣 我在这里写了一个简化版本 include
  • 每个元素的 asp.net Web 表单自定义错误消息

    我创建了一个 Web 应用程序 表单 以及后端 SQL 插入和查询 目前我正在显示所有用户错误消息 div style padding 1em div
  • 从结构调用 C++ 成员函数指针

    我找到了有关调用 C 成员函数指针和调用结构中的指针的信息 但我需要调用结构内部存在的成员函数指针 但我无法获得正确的语法 我在类 MyClass 的方法中有以下代码片段 void MyClass run struct int MyClas
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • ASP.NET - Crystal Report Viewer 打印按钮在 ASP.NET 中不起作用

    我正在使用 Visual Studio 2008 但我遇到了水晶报告问题 当我单击打印按钮时 它会将我带到弹出窗口 但未找到页面 弹出的网址是 http localhost aspnet client System Web 2 0 5072
  • 如何在 C++ 中正确使用 cin.fail()

    我正在编写一个程序 从用户那里获取整数输入cin gt gt iUserSel 如果用户输入一个字母 程序就会进入无限循环 我试图用下面的代码来阻止这种情况 但程序进入无限循环并打印出 错误 输入 我该如何修复我的程序 cin gt gt
  • 更改私有模块片段是否会导致模块重新编译?

    On 此页面有关 C 20 模块功能 https www modernescpp com index php c 20 modules private module fragment and header units 我发现了这样的说法 借
  • 为什么连续抛出 2 个异常不会生成无法访问的代码警告?

    为什么以下代码行不会创建编译器警告 void Main throw new Exception throw new Exception 据我所知 编译器应该通知您无法到达第二个抛出异常 这显然是一个编译器错误 它是在 C 3 0 中引入的
  • C# 可以为控制台应用程序部分类“程序”类吗?

    我想知道是否可以将为任何控制台应用程序创建的默认 程序 类更改为部分类 我想这样做是因为我想要更好的组织 而不是将所有方法都放在按区域分类的 1 个文件中 对我来说 将某些方法类别放在单独的文件中会更有意义 我对分部类的理解是 它是多个文件
  • C++网络序列化[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将 C 数据包序列化为网络流的解决方案 我在这里看到很多帖子提到人们 ACE 谷歌协议缓
  • g++ / gcc 是否支持 C++20 新的atomic_flag 功能?

    根据参考参数 https en cppreference com w cpp atomic atomic flag c 20 有丰富的 对我来说有用的 支持atomic flag运营 然而 目前尚不清楚 gcc 是否支持这些功能 它们在任何
  • 异步/等待 - 是*并发*吗?

    我一直在考虑 C 5 中新的异步内容 并且出现了一个特殊问题 据我了解 await关键字是一个简洁的编译器技巧 语法糖来实现连续传递 http en wikipedia org wiki Continuation passing style
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • 使用通用存储库模式和流畅的 nHibernate

    我目前正在开发一个中型应用程序 它将访问不同站点上的 2 个或更多 SQL 数据库等 我正在考虑使用类似的东西 http mikehadlow blogspot com 2008 03 using irepository pattern w
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem
  • 如何使用 Microsoft Graph API 更新 MailboxSettings

    我想从不同的日历更新邮箱设置 如何构建可以通过 Microsoft Graph 更新 MailboxSetting 的请求 这是我的代码示例 但有例外 代码示例 User obj GraphServiceClient Users roomC

随机推荐

  • 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