动态创建链表(头插法、尾插法)

今天我们来学习动态创建链表!!!

动态创建链表:分为头插法和尾插法

头插法(动态创建):

头插法就是让新节点变成头

代码如下

                           

        吐血了:这边有个非常重要的知识点,这边第三个if这里一定要将new->next初始化为NULL,因为这个if的条件就是当这个head为NULL,new做头的时候,所以此时传过来的new就是做头的,就只有它这一个,没有下一个,所以如果不初始化new里面的next的话,那么就会发生未定义的行为,就是个野指针,那么在遍历的时候,由于new->next没有初始化就会发生未定义的行为,就会发生死循环且是看不懂的循环比如:

非常的可怕!差点给我吓晕了

      但是在Linux的虚拟机上面运行又不会出现这样的情况,因为windows和Linux的一些库和处理方式的不同吧,但是还是要加上new->next = NULL,这样才符合逻辑。

头插法代码

#include <stdio.h>
#include <stdlib.h>
struct Test
{
    int data;
    struct Test *next;
};

struct Test *insertDataBeforeHead(struct Test *head)
{
    struct Test *new = NULL;
    while(1){
        new = (struct Test *)malloc(sizeof(struct Test));
        if (new == NULL)
        {
            printf("内存分配失败\n");
            return head;
        }
        printf("请输入data\n");
        scanf("%d",&(new->data));
        if(new->data == 0){
            printf("0 quit\n");
            return head;
        }
        if(head == NULL){
            head = new;
            new->next = NULL;//太关键了这个
        }else{
            new->next = head;
            head = new;
        }
    }
    return head;
}

void printfInfo(struct Test *head)
{
    struct Test *point;
    point = head;
    while(point !=NULL){
        printf("%d ",point->data);
        point =point->next;
    }
    putchar('\n');

int main()
{
     struct Test *head = NULL;
     head = insertDataBeforeHead(head);
     printfInfo(head);

     return 0;
}

demo如上各位友友们,尽情享受......

明天学习头插法的优化补充!

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

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

相关文章

Dp通用套路(闫式)

闫式dp分析法&#xff1a; 从集合角度来分析DP问题。 核心思想&#xff1a; DP是一种求有限集中的最值或者个数问题 由于集合中元素的数量都是指数级别的&#xff0c;直接用定义去求&#xff0c;把每种方案都用dfs暴力枚举一遍&#xff0c;时间复杂度很高&#xff0c;此时用…

33、前台搜索功能怎么实现?

输入搜索的东西&#xff0c;如果为空 如果有 前端是提交表单&#xff0c;方式是 post 后端接受 调用 mybatisplus的categoryService.getById 用户在搜索框内输入关键字之后&#xff0c;执行 js 中的 load方法&#xff0c;前端提交表单&#xff0c; 后端 controller 中的loa…

Spring Boot 框架概述

1. 简介 Spring Boot 是由 Pivotal 团队开发的一个用于简化 Spring 应用开发的框架。它通过提供默认配置、嵌入式服务器和自动配置等特性&#xff0c;让开发者能够更快速地构建独立的、生产级别的 Spring 应用。 Spring Boot 的主要特点包括&#xff1a; 快速创建独立的 Spri…

机器学习第二讲:对比传统编程:解决复杂规则场景

机器学习第二讲&#xff1a;对比传统编程&#xff1a;解决复杂规则场景 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1a;超详细手把手指南 一、场景…

Jackson Databind

Jackson Databind 是 Java 生态中处理 JSON 数据的核心库之一&#xff0c;主要用于实现 Java 对象与 JSON 数据之间的序列化与反序列化。它是 Jackson 库家族的一部分&#xff0c;通常与 jackson-core 和 jackson-annotations 一起使用&#xff0c;共同完成 JSON 处理任务。 核…

MySQL 中的事务隔离级别有哪些?

MySQL 支持四种标准的事务隔离级别&#xff0c;从低到高依次为&#xff1a;读未提交&#xff08;READ UNCOMMITTED&#xff09;、读已提交&#xff08;READ COMMITTED&#xff09;、可重复读&#xff08;REPEATABLE READ&#xff09; 和 串行化&#xff08;SERIALIZABLE&#x…

RAG优化知识库检索(1):基础概念与架构

1. 引言 大语言模型(LLM)常常面临着知识时效性、幻觉生成、定制化难等挑战,检索增强生成(Retrieval-Augmented Generation, RAG)技术作为解决这些问题的有效方案,正在成为AI应用开发的标准架构。 本文将从基础概念入手,全面介绍RAG技术的核心原理、标准架构与组件,以及评…

安卓工程build.gradle中的Groovy的常见知识点

文章目录 变量定义函数定义函数调用闭包参数APK输出配置多channel配置依赖配置关键总结常见混淆点groovy高度兼容java 变量定义 def debugCdnUrl "\"http://xxx\"" //变量赋值函数定义 def getTime() { // 函数定义&#xff08;def 是 Groovy 中定义变…

阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化

作者&#xff1a;裘文成&#xff08;翊韬&#xff09; 摘要 随着企业全球化业务的扩展&#xff0c;如何高效、经济且可靠地将分布在海外各地的应用与基础设施日志统一采集至阿里云日志服务 (SLS) 进行分析与监控&#xff0c;已成为关键挑战。 本文聚焦于阿里云高性能日志采集…

deep seek简介和解析

deepseek大合集&#xff0c;百度链接:https://pan.baidu.com/s/10EqPTg0dTat1UT6I-OlFtg?pwdw896 提取码:w896 一篇文章带你全面了解deep seek 目录 一、deep seek是什么 DeepSeek-R1开源推理模型&#xff0c;具有以下特点&#xff1a; 技术优势&#xff1a; 市场定位&…

在ISOLAR A/B 工具使用UDS 0x14服务清除单个DTC故障的配置

在ISOLAR A/B 工具使用UDS 0x14服务清除单个DTC故障的配置如下图所示 将DemClearDTCLimitation参数改成DEM_ALL_SUPPORTED_DTCS 此时0x14 服务就可以支持单个DTC的故障清除&#xff0c; 如果配置成 DEM_ONLY_CLEAR_ALL_DTCS 则只能够用0x14服务清楚所有DTC。

Redis面试 实战贴 后面持续更新链接

redis是使用C语言写的。 面试问题列表&#xff1a; Redis支持哪些数据类型&#xff1f;各适用于什么场景&#xff1f; Redis为什么采用单线程模型&#xff1f;优势与瓶颈是什么&#xff1f; RDB和AOF持久化的区别&#xff1f;如何选择&#xff1f;混合持久化如何实现&#x…

Selenium自动化测试工具常见函数

目录 前言 一、什么是自动化&#xff1f; 二、元素的定位 三、测试对象的操作 3.1输入文本send_keys() 3.2按钮点击click() 3.3清除文本clear() 3.4获取文本信息text 3.5获取页面的title与URL 四、窗口 4.1窗口的切换switch_to.window() 4.2窗口大小设置 …

seata 1.5.2 升级到2.1.0版本

一、部署1.5.2 1、解压缩 tar -xvf apache-seata-***-incubating-bin.tar.gz 2、修改conf下的application.yml 只需要修改seata下的此配置&#xff0c;然后再nacos中添加其它配置&#xff0c;下面是application.yml的配置&#xff1a; server:port: 7091spring:applic…

Vue知识框架

一、Vue 基础核心 1. 响应式原理 数据驱动&#xff1a;通过 data 定义响应式数据&#xff0c;视图自动同步数据变化。 2、核心机制 Object.defineProperty&#xff08;Vue 2.x&#xff09;或 Proxy&#xff08;Vue 3.x&#xff09;实现数据劫持。依赖收集&#xff1a;追踪…

Nginx静态资源增加权限验证

Nginx静态资源增加权限验证 一、前言二、解决思路2.1、方式一2.2、方式二三、代码3.1、方式一3.1.1、前端代码3.1.2、后端代码3.1.3、Nginx调整3.1.4、注意事项3.2.方式二四、参考资料一、前言 在项目开发的过程中,项目初期,及大部分小型项目都是使用共享磁盘进行静态文件的…

分析NVIDIA的股价和业绩暴涨的原因

NVIDIA自2016年以来股价与业绩的持续高增长&#xff0c;是多重因素共同作用的结果。作为芯片行业的领军企业&#xff0c;NVIDIA抓住了技术、战略、市场与行业趋势的机遇。以下从技术创新、战略布局、市场需求、财务表现及外部环境等维度&#xff0c;深入分析其成功原因&#xf…

更换芯片后因匝数比变化,在长距离传输时出现通讯问题。我将从匝数比对信号传输的影响、阻抗匹配等方面分析可能原因,并给出相应解决方案。

匝数比影响信号幅度与相位&#xff1a;原 HM1188 芯片匝数比 1:1&#xff0c;信号在变压器原副边传输时幅度基本不变&#xff1b;更换为 XT1188 芯片&#xff08;匝数比 1:2&#xff09;后&#xff0c;根据变压器原理&#xff0c;副边输出信号幅度会变为原边的 2 倍。短距离 10…

Python引领前后端创新变革,重塑数字世界架构

引言:Python 在前后端开发的崭新时代 在当今数字化时代,软件开发领域持续创新,而 Python 作为一门功能强大、应用广泛的编程语言,正引领着前后端开发的变革浪潮。Python 以其简洁易读的语法、丰富的库和框架生态系统,以及强大的跨领域适用性,在计算机领域占据了举足轻重…

IP SSL证书常见问题助您快速实现HTTPS加密

一、什么是IP SSL证书&#xff1f; IP SSL证书是一种专门用于保护基于IP地址的网站或服务器的SSL证书。与传统的域名SSL证书不同&#xff0c;它不需要绑定域名&#xff0c;而是直接与公网IP地址关联。当用户访问该IP地址时&#xff0c;浏览器与服务器之间会建立加密连接&#…