c++单链表的创建、输出、插入、删除操作

2023-11-13

混子来了

单链表的创建:

首先单链表的定义就不再赘述了,本文利用带头节点,尾插法的方法进行创建,同时注意头节点在此的重要性,即所有操作都要通过头节点来实现,头节点的值绝对不能被改变

  1. 结点的定义
struct ListNode//定义节点
{
    int m_key;
    ListNode* next;
}A;
  1. 由于我们需要一个头节点,所以我们就先创建一个头节点
    ListNode* head = NULL;
    head = new ListNode;
    head->next = NULL;
  1. 接下来就是创建一个单链表了
void createList(ListNode* pHead,int n)//创建单链表
{
   ListNode* p = pHead;//不能改变头节点
   for (int i = 1; i <= n; ++i)
   {
       ListNode* pNewNode = new ListNode;//申请一个新节点
       cin>>pNewNode->m_key; // 将新节点的数据域赋值
       pNewNode->next = NULL;//新节点的指针域置为空
       p->next = pNewNode; // 上一个节点的指针域指向这个新节点
       p = pNewNode; // p节点指向这个新节点
   }
}

单链表的输出:

单链表的输出比较简单,就是利用头节点,找到第一个节点,当节点不为空时,输出数据域,然后节点后移

void print(ListNode*phead)
{
    ListNode*p=phead->next;
    while(p!=NULL)
    {
        cout<<p->m_key<<" ";
        p=p->next;
    }
    cout<<endl;
}

单链表的插入:

还是直接上代码叭,有注释

void insertlist(ListNode*phead,int i,int e)
{
    ListNode*p=phead->next;//利用头节点找到第一个节点
    int j=0;
    while(p)
    {
        j++;//判断指针位置
        if(j<i-1)//将指针移到i-1位置
            p=p->next;
        else
            break;
    }
    //在i-1和i中间插入数据
    ListNode*s=new ListNode;//先建立新节点
    s->m_key=e;//新节点的数据域赋值
    s->next=p->next;//让新节点的指针域指向p节点的指针域的指向
    p->next=s;//p节点指向新建立的节点
}
//可以画个图理解一下,有一点点小绕,哈哈

单链表的删除:

同上,我太懒了,哈哈
删除第i个节点就是让第i-1个节点的指针域指向第i+1个节点

void deletelist(ListNode*phead,int k)
{
    ListNode*p=phead->next;//还是先找到第一个节点
    int j=0;
    while(p)//节点不为空时
    {
        j++;//判断指针位置
        if(j<k-1)//让指针到达第i-1个位置
            p=p->next;
        else
            break;
    }
    //删除第i个节点
    p->next=p->next->next;
}

来一个完整代码叭:

先创建单链表,输入插入的位置和值,输出,再输入删除的位置,输出
其实就是个搬运工,把上面的代码抄下来,蛤蛤蛤

#include <iostream>
using namespace std;

struct ListNode//定义节点
{
   int m_key;
   ListNode* next;
}A;
void createList(ListNode* pHead,int n)//创建单链表
{
   ListNode* p = pHead;//不能改变头节点
   for (int i = 1; i <= n; ++i)
   {
       ListNode* pNewNode = new ListNode;//申请一个新节点
       cin>>pNewNode->m_key; // 将新节点的数据域赋值
       pNewNode->next = NULL;//新节点的指针域置为空
       p->next = pNewNode; // 上一个节点的指针域指向这个新节点
       p = pNewNode; // p节点指向这个新节点
   }
}
void print(ListNode*phead)
{
   ListNode*p=phead->next;
   while(p!=NULL)
   {
       cout<<p->m_key<<" ";
       p=p->next;
   }
   cout<<endl;
}
void insertlist(ListNode*phead,int i,int e)
{
   ListNode*p=phead->next;
   int j=0;
   while(p)
   {
       j++;//判断指针位置
       if(j<i-1)//将指针移到i-1位置
           p=p->next;
       else
           break;
   }
   ListNode*s=new ListNode;//在i-1和i中间插入数据
   s->m_key=e;
   s->next=p->next;
   p->next=s;
}
void deletelist(ListNode*phead,int k)
{
   ListNode*p=phead->next;
   int j=0;
   while(p)
   {
       j++;
       if(j<k-1)
           p=p->next;
       else
           break;
   }
   p->next=p->next->next;
}
int main()
{
   int n;
   cin>>n;
   ListNode* head = NULL;
   head = new ListNode;
   head->next = NULL;
   createList(head,n);
   int i,e;
   cin>>i;
   cin>>e;
   insertlist(head,i,e);
   print(head);
   int k;
   cin>>k;
   deletelist(head,k);
   print(head);
   return 0;
}

还是给个运行的栗子叭
在这里插入图片描述
看了本文写的这几个,还有剩下的操作大家大概会了叭,我相信大嘎!!!
万水千山总是情,点个小赞行不行
阿里嘎多

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

c++单链表的创建、输出、插入、删除操作 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • vue移动端无法使用string.replaceAll,报错显示空白

    开发vue时 使用了replaceAll函数 在pc端调试没问题 但是打包部署到移动端端测试时 发现部分页面显示空白 控制台只显示Error 经过排查是replaceAll函数报错了 替换成replace解决
  • 如何将彩图.png转换成灰度图.png(python)

    1 安装所需要的包 使用PIL库需要先安装Pillow包 Pillow是PIL库的一个Fork 分支 它提供了与PIL兼容的API 并进行了一些功能扩展和改进 因此 在使用PIL之前 需要确保已经正确安装了Pillow包 可以使用pip命令
  • Python实现照片右上角添加红色数字

    Python实现照片右上角添加红色数字 在许多图像处理应用程序中 我们经常需要在图像上添加一些标记或注释 本文将介绍如何使用Python编程语言在照片的右上角添加一个红色的数字 我们将使用Python的Pillow库来处理图像 并利用该库提
  • android.intent.extra,Android Intent的几种用法详细解析

    Intent应该算是Android中特有的东西 你可以在Intent中指定程序要执行的动作 比如 view edit dial 以及程序执行到该动作时所需要的资料 都指定好后 只要调用startActivity Android系统会自动寻找
  • C语言预处理条件语句的 与或运算

    C语言预处理条件语句的 与或运算 1 ifdef 与或运算 ifdef MIN MAX 错误使用 if defined MIN defined MAX 正确使用 ifdef MIN MAX 错误使用 if defined MIN defin
  • 汇编语言 第3版 王爽 检测点答案及详细解析

    第一章 基础知识 检测点1 1 1 1个CPU的寻址能力为8KB 那么它的地址总线的宽度为 13位 2 1KB的存储器有 1024 个存储单元 存储单元的编号从 0 到 1023 3 1KB的存储器可以存储 8192 2 13 个bit 1
  • HTML 一文读懂

    目录 1 认识HTML 2 HTML 网页构成 HTML基本结构 网页头部信息 3 HTML 基本标签 4 图像标签 5 链接标签 6 行内元素和块元素 7 列表 8 表格 9 媒体元素 10 页面结构分析 11 HTML 内联框架 ifr
  • 本地搭建web服务器、个人博客并发布公网访问

    文章目录 前言 1 安装套件软件 2 创建网页运行环境 指定网页输出的端口号 3 让WordPress在所需环境中安装并运行 生成网页 4 装修 个人网站 5 将位于本地电脑上的网页发布到公共互联网上 前言 在现代社会 网络已经成为我们生活
  • Spring Boot + Vue的网上商城之登陆认证

    Spring Boot Vue的网上商城之登陆认证 本篇博客介绍了如何使用Spring Boot和Vue来实现网上商城的登陆认证功能 下面是本文的主要内容总结 后端实现 创建Spring Boot项目 并添加Spring Security和
  • 为什么spring单例模式可以支持多线程并发访问

    为什么spring单例模式可以支持多线程并发访问 1 spring单例模式是指 在内存中只实例化一个类的对象 2 类的变量有线程安全的问题 就是有get和set方法的类成员属性 执行单例对象的方法不会有线程安全的问题 因为方法是磁盘上的一段
  • Vulnhub靶机-BLACKLIGHT

    项目地址 http download vulnhub com blacklight BLACKLIGHT ova 靶机渗透 网络选择桥接模式 使用命令 arp scan l nmap 192 168 0 130 使用dirb遍历网站目录结构
  • Linux自学笔记

    Linux自学笔记 06 常用命令 文件目录类 Linux自学笔记 01 文件系统和目录结构 Linux自学笔记 02 VIM编辑器的安装与使用 Linux自学笔记 03 Linux网络配置 Linux自学笔记 04 远程登录 Linux自
  • 高速模数转换器(ADC)的INL/DNL测量

    摘要 尽管积分非线性和微分非线性不是高速 高动态性能数据转换器最重要的参数 但在高分辨率成像应用中却具有重要意义 本文简要回顾了这两个参数的定义 并给出了两种不同但常用的测量高速模数转换器 ADC 的INL DNL的方法 近期 许多厂商推出
  • 微信小程序 ---- 【invalid credential, access_token is invalid】

    报错返回 errcode 40001 errmsg invalid credential access token is invalid or not latest rid 6004f3da 1529ba72 5c345f67 报错原因 a
  • oled拼接屏有哪些安装方法?

    嘉峪关是一个历史悠久的城市 也是一个旅游胜地 为了更好地展示城市的文化和旅游资源 嘉峪关市政府决定在市区的重要场所安装oled拼接屏 oled拼接屏是一种高清晰度的显示屏 具有高亮度 高对比度 高色彩饱和度等优点 它可以将图像和视频以更清晰
  • qtp的基本使用方法(1)

    1 action qtp为每一个action生成相应的测试文件和目录 对象库也是和action绑定的 用action 来划分和组织测试流程 编辑action 修改action的名字 action properties 增加action in
  • StartSSL CA证书签名 和 Tomcat Https访问 全过程说明

    第1章 准备工作 IP地址 外网服务器的IP 如X X 47 xx 作用 1 解析域名 2 部署Tomcat7 域 名 将域名 如samuscasting cn 解析 映射到外网IP 注 1 记住购买域名所使用的邮箱 原因 认证机构对域名做
  • QGIS编译(跨平台编译)之五十一:MacOS环境下安装Python、pyqt5、pyqt5-tools等

    目录 1 安装背景 2 卸载Python 3 下载Python3 9 4 安装Python3 9 5 安装pyqt5 6 安装pyqt5 tools
  • 微信小程序 分享图片大小处理

    1 在分享的page 添加 canvas 标签
  • c++单链表的创建、输出、插入、删除操作

    混子来了 单链表的创建 首先单链表的定义就不再赘述了 本文利用带头节点 尾插法的方法进行创建 同时注意头节点在此的重要性 即所有操作都要通过头节点来实现 头节点的值绝对不能被改变 结点的定义 struct ListNode 定义节点 int