c++实现链表的建立、头插法、尾插法、删除指定节点、打印节点

C++链表基础使用——创建链表、删除第n个节点、删除前n个节点、插入节点、更改某个节点的值 后附创建链表的两种方法的示意图。 #include<iostream> typedef struct Node{ int value; Node *next; }node,*linklist; const int numoflink = 10;//创建有10个节点的链表 const int delete_n = 9;//删除第9个节点 const int delete_f... 阅读详情
#include <stdlib.h>
#include<iostream>
using namespace std;
//Definition for singly - linked list.
class Node {
public:
    int val;
    Node* next;
    Node() : val(0), next(nullptr) {}
    Node(int x) : val(x), next(nullptr) {}
    Node(int x, Node* next) : val(x), next(next) {}

    //创建链表 头结点
    static Node* createList(){
        Node* headNode = new Node;
        headNode->val = -1;
        headNode->next = nullptr;
        return headNode;
    }

    //创建节点
    static Node* creatNode(int data){
        Node* node = new Node;
        node->val = data;
        node->next = nullptr;
        return node;
    }

    //头插法
    void static insertNodeInHead(Node* list, int data) {
        Node* newNode;
        newNode = creatNode(data);
        newNode->next = list->next;
        list->next = newNode;
    }

    //尾插法
    void static insertNodeInEnd(Node* list, int data) {
        //没有第一个元素 就直接把list的next指向新节点
        if (list->next == nullptr) {
            list->next = creatNode(data);
            return;
        }
        //每次操作必须使用代理指针!!
        Node* p = list->next;
        while (p->next) {//不能判断p 因为要知道上一个有效节点
            p = p->next;
        }
        p->next = creatNode(data);
    }

    /**
    * 删除指定数据节点
    * 双指针 删除 pre是p的前一个指针
    * 要判断是否为空
    */
    void static deleteNode(Node* list, int data) {
        Node* p = list->next;//从头结点开始
        Node* pre = list;//p的前一个节点
        if (p == NULL) {
            cout << "this List is NULL "<< endl;
            return;
        }
        while (p) {//头结点的下一个节点
            if (p->val == data) {
                pre->next = p->next;
                free(p);
                cout<<"delete "<<data<<" successful!"<<endl;
                return;//若删除多个相同data节点  可以删除该句子和最后的 dont find
            }
            pre = pre->next;
            p = pre->next;//p一定 指向的是pre的下一个(这样可以保证 如果是多个节点的话)
        }
        cout<<"dont find this data:"<<data<<endl;
    }

    /**
     * 打印链表
     * 判断是否为空
     * @param list
     */
    void static printList(Node* list) {
        if (list->next == nullptr) {
            cout << "this list is NULL" << endl;
            return;
        }
        Node* p = list->next;//跳过头指针
        while (p) {
            cout << p->val <<"  ";
            p = p->next;
        }
        cout << endl;
    }

};


void test01()
{
    Node* list;
    //Node::createList();
    list = Node::createList();

    Node::printList(list);
    Node::insertNodeInEnd(list, 4);
    Node::insertNodeInEnd(list, 5);
    Node::insertNodeInEnd(list, 6);
    Node::insertNodeInHead(list, 3);
    Node::insertNodeInHead(list, 2);
    Node::insertNodeInHead(list, 1);
    //打印插入的所有
    Node::printList(list);
    //删除4
    Node::deleteNode(list, 4);
    Node::printList(list);

    Node::deleteNode(list, 4);
    Node::printList(list);
}


int main() {
    test01();
    return 0;
}

带头结点链表的基本操作C/C++(头插法,尾插法,打印,查找,插入,删除) 带头结点链表的基本操作C/C++带头节点链表的基本操作测试结果展示 带头节点链表的基本操作 /** * 带头结点链表基本操作 */ #include <malloc.h> #include <cstdio> /** * 定义结构 */ typedef struct LNode{ //定义单链表结点类型 int data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; //别名 阅读详情

相关推荐

Moodle平台题库建设技术

Moodle平台题库建设技术简述1新的改变1功能快捷键1合理的创建标题,有助于目录的生成1如何改变文本的样式1插入链接与图片1如何插入一段漂亮的代码片1生成一个适合你的列表1创建一个表格1设定内容居中、居左、居右1SmartyPants1创建一个自定义列表1如何创建一个注脚注释也是必不可少的1KaTeX数学公式1新的甘特图功能,丰富你的文章1UML 图表1FLowchart流程图1导出与导入导出1...

lxf78的博客 4534

链表c++

数据结构单链表用c++编写

weixin_66034721的博客 562

别再死磕NFP了!用Python+遗传算法搞定异形件自动排版(附完整代码)

本文介绍了如何利用Python和遗传算法实现异形件智能排版,解决传统NFP方法计算复杂的问题。通过Shapely库处理几何运算和DEAP库搭建遗传算法框架,结合模拟退火策略避免局部最优,显著提升材料利用率。附完整代码和优化技巧,适用于服装裁剪、金属加工等行业。

weixin_26965807的博客 236

c语言单链表头插法尾插法以及删除结点的操作(超详细) 学习笔记

注意:若是删除多个相同元素data 则将break 删去即可。若是c语言 则需要改变头文件为/#include注意:未考虑到malloc开辟空间错误或者取参数错误所发生的情况。删除操作也默认均成功。

记录学习过程 1561

某盾blackBox逆向——纯算

某盾blackBox逆向——纯算

Lzyydsb的博客 5892

使用python获取同花顺免费版和同花顺远航版自选股数据用于量化交易

在做量化交易时,有时需要在盘中实时监控同花顺自选股的数量,以便灵活地自定义提醒、捕捉买卖时点等。那么,如何使用python获取同花顺自选股数据呢?

tzzqn2008的专栏 3684

C++ 头结点单链表——头插法尾插法及改写为类模板封装函数代码

本文章是对面向对象中单链表的头插法尾插法及类模板封装的总结,仅供参考

qq_62015542的博客 1335

史上最全的Logisim存储系统实验教程(基于华中科技大学计算机组成原理实验)内赋源码下载

本博客是最全的最好的解释的华中科技大学计算机组成实验存储系统实验,本博客给出了电路实现,也给出了使用电路的原因有利于新手学习十分详细。并且内赋源码下载。

qq_62325622的博客 2万+

链表2:删除指定节点、头插法尾插法、插入节点

【代码】链表2:删除指定节点、头插法、尾插法。

Jaci133的博客 199

LED灯闪烁实验:代码集成

LED灯闪烁实验已经全部完成,在该实验中使用了较多的工具链,涉及底层软件、建模、软件编译等。首先,通过STM32CubeMX工具进行STM32底层软件配置,可以大大减少手写代码的工作量。另外由于做了可视化,也降低了STM32的上手难度,提升效率。利用Simulink建模,可以在PC环境下验证应用层算法的正确性而不依赖于具体控制器,实现应用层算法和底层软件、控制器硬件的解耦。另外,图形化的建模方式也更加有利于开发者思考与分析,大量的封装库文件也可以降低开发的工作量。

u013288925的博客 369

【传感器模块项目实战】自动驾驶/机器人相关传感器原理及标定

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、IMU二、相机三、激光雷达四、轮速里程计五、GPS/RTK六、毫米波雷达总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【自动驾驶相关传感器原理及标定】**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、IMU IMU惯导系统的特性(imu_calc函数功能) IMU运行的

qq_35635374的博客 1232

【详细注释】C/C++实现链表的增删查(包括头插法与尾插法)

从链表开始 自链表开始,数据结构进入了一个新纪元,即大量使用结构体、结构体指针和内存空间申请malloc的时代。在开始链表的学习之前,我推荐所有朋友都认真地搞清楚结构体与结构体指针、malloc的具体用法和返回类型等,为从今往后的数据结构学习打好基础。 头插法与尾插法 顾名思义,头插法就是在链表的开头插入一个新节点,如果链表有头结点,那么就一直只在头结点后面插入新节点。而尾插法则是将新节点插入到链表的最后面,即链表的“小尾巴”。 详细代码实现 #include <stdio.h> #includ

哈瑞斯联邦的博客 934

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表

#include<iostream> #include<stdlib.h> using namespace std;typedef struct LNode{ int data; struct LNode *next;//next为指针域,存放其后继结点的地址。 }LNode,*LinkList;//采用头插法建立单链表 LinkList CreatList1(LinkList &L

wangtiankuo的博客 4210

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

单链表的实现

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 在本文中单链表都使用了头节点来简化操作,头指针head指向头结点。链表由头指针唯一确定,单链表可以用头指针的名字来命名。 #include <iostream> using namespace std; #define ElemType int .

ruivendair的博客 808

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

单链线性表一

#include&lt;iostream&gt; #include&lt;stdlib.h&gt; using namespace std; typedef struct LNode{ int data; struct LNode *next;//next为指针域,存放其后继结点的地址。 }LNode,*LinkList; //采用头插法建立单链表 LinkList Creat...

鱼之天空的博客 435

C语言的双向链表头插法和尾插法,指定节点删除

文章目录前言头插法尾插法删除节点测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点。 关于构造双向链表的过程我们常见的有两种方法,和单链表一样:头插法和尾插法。 头插法:字面意思也是很好理解,每次插入的元素在上一个节点之前 尾插法:字面意思也表达出了每次的元素插入会在上一个节点之后 详细插入过程可以参考如下 头插法 头插法基本过程如下图,已经描...

天行健,地势坤 3895

单链表的基本操作C++

在这里插入代码片@TOC 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式

alanmian的博客 8359

P8 删除链表指定节点

🎬 个人主页:@ChenPi🐻推荐专栏1: 《》✨✨✨🔥 推荐专栏2: 《》✨✨✨📝推荐专栏3: ​​​​​​《》 ✨✨✨🍉本篇简介 : 链表数据插入之尾插法✨ 只有我努力了 才有机会接触成功✨链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。

weixin_73901182的博客 1116

使用C++实现双链表

c++实现的双链表

qq_58240448的博客 3884

单向链表的头插法、尾插法以及插入、删除

#include<stdio.h> #include<stdlib.h> #define LIST_INIT_SIZE 100//定义线性表空间的初始存储大小为 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct Node { ElemType data;//数据域 struct N

CodePanda@GPF的博客 293

链表的创建:头插法与尾插法详解(数据结构)

链表(Linked List)是一种重要的数据结构,适用于插入和删除操作频繁的场景。在 C++ 语言中,我们通常使用结构体(,新节点总是插入到链表头部,适用于。,以便深入理解链表的操作方式!依次插入新节点,适用于按。如果你是初学者,建议。

Yhame的博客 1477

读取文件建立一个链表

从文件导入数据建立一个链表,实现学生信息的增,删,查,取功能 链表的建立分为头插和尾插,头插数据读取顺序与插入顺序相反。尾插读取顺序与插入顺序相同。 具体代码如下: 尾插法: #include<stdio.h> #include<malloc.h> #include&l...

chuanjun6733的博客 3368

C++单链表头插法和尾插法实现

这份笔记介绍了一个用 C++ 实现的单链表,提供了两种常见的链表构建方法:头插法和尾插法。单链表是一种基础而重要的数据结构,它由一系列节点组成,每个节点包含了数据元素和指向下一个节点的指针。

cbzwq1314的博客 1123

数据结构(1)——单链表的插入和删除

实验目标 (1)了解和掌握线性表的逻辑结构和链式存储结构; (2)掌握单链表的基本算法及相关的时间性能分析。 实验要求 (1)建立一个数据域存储字符串的单链表,每一个节点存储一个字符串; (2)提供节点插入功能,在链表中不允许有重复的字符串,要求在插入节点时需要进行查重处理; (3)提供节点删除功能,根据输入的字符串,先找到相应的结点,后删除之。

weixin_44164249的博客 2386

cpp 单链表基本操作

单链表的结构体 定义: #include <stdio.h> #include <malloc.h> typedef struct LNode{ int data; struct LNode* next; }LNode, * LinkList; //定义 * LinkList 的意义? 单链表 头插法: //单链表 头插法 LinkList createTo...

BLOG of iJX 2101
上一篇: anaconda启动非常慢,一直卡在Initializing
下一篇: C++ 虚函数详解(动态绑定)
MRYU.
博客等级 码龄9年 4粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值