王道p40 1.设计一个递归算法,删除不带头结点的单链表L中的所有值为x的结点(c语言代码实现)图解递归

news2025/1/13 3:06:44

视频讲解(献丑了):p40 第1题 王道数据结构课后代码题c语言代码实现_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1Xa4y1Q7ui/?spm_id_from=333.999.0.0

首先它是一个不带头结点的单链表

我们就得特殊处理

我们先让*L==NULL;

然后为s开辟一个新的存储空间,让他等于a[0]的值

下面我们看一下建立无头节点的单链表代码该如何实现

void buildlinklist(linklist* L)
{
    *L = NULL;
    lnode* s, * r = *L;
    int i = 0;
    if (*L == NULL)
    {
        s = (lnode*)malloc(sizeof(lnode));
        s->data = a[0];
        s->next = NULL;
        *L = s;
    }
    r = *L;
        for (i = 1; i < n; i++)
        {
            s = (lnode*)malloc(sizeof(lnode));
            s->data = a[i];
            r->next = s;
            r =s;
        }
    r->next = NULL;
}

递归的图解 

本题主要代码为

void delete(linklist* L,int x)
{
    lnode* p;
    if (*L== NULL) {
        return;
    }
    if((*L)->data == x) 
    {
        p = *L;
        *L = (*L)->next;
        free(p);
        delete(L, x);
    }
    else {
        delete(&(*L)->next, x);
    }
}

 完整测试代码为

#include<stdio.h>
#include<stdlib.h>
typedef struct lnode
{
    int data;
    struct lnode* next;
} lnode, * linklist;
int a[5] = { 1,3,3,4,5 };
int n = 5;
void buildlinklist(linklist* L)
{
    *L = NULL;
    lnode* s, * r = *L;
    int i = 0;
    if (*L == NULL)
    {
        s = (lnode*)malloc(sizeof(lnode));
        s->data = a[0];
        s->next = NULL;
        *L = s;
    }
    r = *L;
        for (i = 1; i < n; i++)
        {
            s = (lnode*)malloc(sizeof(lnode));
            s->data = a[i];
            r->next = s;
            r =s;
        }
    r->next = NULL;
}
void delete(linklist* L,int x)
{
    lnode* p;
    if (*L== NULL) {
        return;
    }
    if((*L)->data == x) 
    {
        p = *L;
        *L = (*L)->next;
        free(p);
        delete(L, x);
    }
    else {
        delete(&(*L)->next, x);
    }
}
void print(linklist* L)
{
    lnode* k=*L;
    while (k)
    {
        printf("%d ", k->data);
        k = k->next;
    }
}
int main()
{
    linklist L;
    buildlinklist(&L);
    delete(&L,3);
    print(&L);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1137247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3-admin-element框架登录如何修改?

1、找到vite.config.js文件 配置反向代理 2、找到src文件下的user.js文件 3、找到views文件下的login文件 打开找到comp文件夹找到LoginFrom.vue页面进去 把这个改成自己的账户数据&#xff08;密码不一致自行更改&#xff09; 4、找到store文件下的modules下的user.js 5、找到…

Java工具库——FastJson的40个常用方法

那些想看却没看的书&#xff0c;在心里摆满一个图书馆… 工具库介绍 阿里巴巴的 FastJSON&#xff0c;也被称为 Alibaba FastJSON 或阿里巴巴 JSON&#xff0c;是一个高性能的 Java JSON 处理库&#xff0c;用于在 Java 应用程序中解析和生成 JSON 数据。FastJSON 以其卓越的性…

企业电脑监控软件三大盘点

信息技术的不断发展&#xff0c;企业对于员工电脑监控的需求越来越强烈。监控员工电脑可以有效地提高工作效率&#xff0c;防止员工泄露公司机密&#xff0c;同时也可以保护公司的信息安全。 其中给大家推荐三款实用的企业电脑监控软件&#xff1a; 一、域之盾软件 该软件可实…

VS2015 搭建wxWidgets-3.2.3测试环境及运行samples

此方法免去繁琐的环境配置,直接运行及写自己的代码。 1:我们到wxWidgets的官网下载 Release wxWidgets 3.2.3 wxWidgets/wxWidgets GitHub 下载完成后如下: 2:解压上面下载的wxWidgets-3.2.3.zip 解压后如下: 之后到如下目录,运行wx_vc14.sln 3:生成结果 D:\camer…

2023年以就业为目的学习Java还有必要吗?

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

操作系统【OS】调度算法对比图

FCFS SJF 高响应比 时间片轮转 多级反馈队列 可抢占&#xff1f; √ √ √ 队列内算法不一定 不可抢占&#xff1f; √ √ √ 队列内算法不一定 特点&优点 公平实现简单有利于长作业不利于短作业有利于CPU繁忙作业不利于IO繁忙作业 因为CPU繁忙型进程即…

Kafka入门05——基础知识

目录 副本数据同步原理 HW和LEO的更新流程 第一种情况 第二种情况 数据丢失的情况 解决方案 Leader副本的选举过程 日志清除策略和压缩策略 日志清除策略 日志压缩策略 Kafka存储手段 零拷贝&#xff08;Zero-Copy&#xff09; 页缓存&#xff08;Page Cache&…

AGENS算法c++实现

cluster二维数组存放数据的编号&#xff0c;每次计算两个簇的距离&#xff0c;找出距离最近的&#xff0c;将其中一个簇的编号加入另一个编号的一维序列中&#xff0c;再将这个编号清除&#xff0c;之后再循环cluster。 #include<vector> #include <iostream> #in…

Linux小程序——进度条

1.前置知识说明 ①回车换行 首先我们需要知道&#xff0c;回车与换行是两个概念&#xff0c;在C语言中使用"\n"时&#xff0c;默认使用的是回车换行&#xff0c;举一个简单的例子&#xff0c;在以前写作文时&#xff0c;我们在某一行写到最后一个字时&#xff0c;我…

Linux C语言开发-D9输入输出

C语言无I/O语句&#xff0c;I/O操作由函数实现 #include <stdio.h> 字符输出函数:putchar(c) 参数&#xff1a;c为字符常量、变量或表达式 功能&#xff1a;把字符c输出到显示屏上 返回值&#xff1a;正常&#xff0c;为显示的代码值 格式输出函数:printf("格式控…

10.25verilog复习,代码规范复盘,触发器复习

verliog复习 1.模块的输入输出(reg与wire) 输入是线性&#xff0c;wire, 输出较复杂需要之前的状态&#xff0c;不仅仅是由当下输入来的信号的与或非组合而成的&#xff0c;需要保存之前状态的&#xff0c;输出类型是reg。 比如计数器&#xff0c;需要在之前计数的基础上再…

排列数字(深度优先搜索) C++实现

题目 代码 #include<iostream> using namespace std; const int N1010; int path[N],n; bool flag[N];void dfs(int u){if(un){for(int i0;i<n;i) printf("%d ",path[i]);puts("");return ;}for(int i1;i<n;i){if(!flag[i]){path[u]i;flag[i…

Postman的高级使用,傻瓜式学习【下】

目录 前言 1、全局变量、环境变量 1.1、概念&#xff1a; 1.2、如何设置全局变量、环境变量 1.3、获取全局变量、环境变量 1.4、案例1&#xff1a;手动设置变量&#xff0c;请求参数获取 1.5、案例2&#xff1a;代码设置变量&#xff0c;代码获取变量 2、Postman读取外部…

jvm摘要

第 2 章 Java 内存区域与内存溢出异常 2.2 运行时数据区域 程序计数器-线程私有:是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。 程序计数器是唯一一个没有规定任何OutOfMemoryError 情况的区域。 Java 虚拟机栈-线程私有:用于执行Java …

设计模式:桥接模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《适配器模式》 下一篇《装饰器模式》 简介&#xff1a; 桥接模式&#xff0c;它是一种结构型设计模式&#xff0c;它的主要目的是将抽象部分与具体实现部分分离&#xff0c;使它们都可以独立地变化。…

【码银送书第九期】《ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践》

计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地改变了金融、商业、教育、娱乐等领域的运作方式。数据分析、人工智能和云计算等新兴技术&#xff0c;也在不断地影响和改变着各个行业。 如今&#xff0c;我们正在见证人工智能技术的…

九方面解读国家数据局成立,可交易数据的五大特性探讨

​ 10月25日&#xff0c;国家数据局正式揭牌&#xff0c;标志着我国数据管理进入了新的阶段。国家数据局负责协调推进数据基础制度建设&#xff0c;统筹数据资源整合共享和开发利用&#xff0c;统筹推进数字中国、数字经济、数字社会规划和建设等&#xff0c;由国家发展和改革…

LeetCode刷题---简单组(四)

文章目录 &#x1f352;题目一 27. 移除元素&#x1f352;解法一&#x1f352;题目二 28. 找出字符串中第一个匹配项的下标&#x1f352;解法一&#x1f352;题目三 35. 搜索插入位置&#x1f352;解法一 &#x1f352;题目一 27. 移除元素 给你一个数组 nums 和一个值 val&…

MyBatis-Plus代码自动生成

前言 这是一段使用 MyBatis-Plus 自动生成代码的示例代码。MyBatis-Plus 是一个优秀的 ORM 框架&#xff0c;它在 MyBatis 的基础上进行了扩展和增强&#xff0c;提供了更加便捷、高效的数据库操作方式。在实际开发中&#xff0c;我们通常需要编写大量的 CRUD 操作代码&#x…

OpenCV官方教程中文版 —— 2D 直方图

OpenCV官方教程中文版 —— 2D 直方图 前言一、介绍二、OpenCV 中的 2D 直方图三、Numpy 中 2D 直方图四、绘制 2D 直方图 前言 本节我们会学习如何绘制 2D 直方图&#xff0c;我们会在下一节中使用到它。 一、介绍 在前面的部分我们介绍了如何绘制一维直方图&#xff0c;之…