平台:Visual Studio 2022

编程工具:C++

目录:

1、链表的结构体实现

2、链表的声明、开辟空间

3、链表的初始化

4、链表的连接

5、链表输出

6、完整代码实例

1、链表的结构体实现

链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:

  • 一个是存储数据元素的数据域(上图中黄色区域)
  • 另一个是存储下一个结点地址的指针域。 (上图中蓝色区域)
struct ListNode {int val;ListNode* next;
};

上面就是链表的结构体定义,可以看出结构体内有两个成员变量,val 是链表的数据部分,*next 是一个指针,代表链表指向下一个节点的引导部分。

2、链表的声明、开辟空间

链表的声明本质上其实是对结构体进行声明,比较特殊的一点是数据空间不能开辟到栈区内,只能开辟到堆区(也就是 new 一个)

(这里具体原理我也不知道为什么,我查的说是在栈区开辟空间以后地址不会更新,如果有大神知道为什么可以在评论区指教一下,谢谢)

//第一种声明方式
ListNode* head01;
head01 = new ListNode;//第二种声明方式
ListNode* head2 = new ListNode;

有两种方式,第一种方式是先声明一个结构体指针对象,再开辟空间;第二种方式是在声明对象的同时就开辟空间了,(这里一定要用 new,把数据安排到堆区)

3、链表的初始化

head01->val = 10;
head01->next = nullptr;head02->val = 20;
head02->next = nullptr;//注意:
//    链表不赋初值的时候也会随机给分配一个值
//    判断的时候不能用 if(head->val == NULL),用 if(head == nullptr)ListNode* head = new ListNode; //只声明分配地址空间,并没有初始化
cout << head->val << endl;  //这里输出一个随机值(有值)

由上一节可知,head01 是一个指针的数据类型,所以它可以指向两个结构体的成员变量。

首先我们使用 head01->val 初始化当前节点的数据内容;然后我们使用 head01->next 指向下一个节点,由于目前没有连接下一个节点,所以我们指向空(在 C++ 中使用 nullptr 代表空指针,NULL 代表空值)

注意:如果只声明且分配空间以后,没有初始化,val里面也是会有一个随机值的

4、链表的连接

head01->next = head02;

一行代码,把 head02 赋值给 head01 指向下一个的指针 next 。

5、链表输出

cout << head01->val << endl;
cout << head01->next->val << endl;  //重点

在链表中,val 的部分通常是我们需要的值,所以我们可以通过 head01->val 查看当前节点的值,也可以通过 head01->next->val 查看下一个连接节点的值


6、完整代码示例

#include <iostream>
using namespace std;//定义链表结构体
struct ListNode {int val;ListNode* next;
};void test01() {ListNode* head01;head01 = new ListNode;head01->val = 10;head01->next = nullptr;  //指针型,必须是nullptrListNode* head02;head02 = new ListNode;head02->val = 20;head02->next = nullptr;head01->next = head02;  //把两个表链接起来//输出cout << head01->val << endl;cout << head01->next->val << endl;  //重点
}void test02() {ListNode* head = new ListNode;cout << head->val << endl;// 链表不赋初值也会随机分配一个值,// 判断的时候不能用if(head->val == NULL),用if(head == nullptr)
}int main() {test01();test02();system("pause");return 0;
}

链表基础【C++实现】相关推荐

  1. 不带头结点的链表基础操作(初始化,增删改查)

    链表是什么? **链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个 ...

  2. 第六天2017/04/11(1:结构体链表基础和相关经典操作)

    一.结构体基础 [知识回顾]自定义数据结构的本质 //结构体中有结构体变量.结构体指针 #include "stdio.h" #include "stdlib.h&quo ...

  3. java链表需要自己编写么_基于java的链表基础操作

    链表结构是由一个或一个以上再内存上不连续存储的元素结点连接而成的数据结构,链表的每个结点都有两个部分,一个部分是存储的数据,另一部分是指向下一结点的指针,既是下一节点的引用. 首先链表一定有一个头结点 ...

  4. 关于C语言链表基础知识

    链表和数组作为算法中的两个基本数据结构,在程序设计过程中经常用到.尽管两种结构都可以用来存储一系列的数据,但又各有各的特点. 数组的优势,在于可以方便的遍历查找需要的数据.在查询数组指定位置(如查询数 ...

  5. 链表基础操作 / 循环链表约瑟夫环/STL链表基本操作

    链表的基础操作 程序功能 输入几 就把几调到数最前面 程序步骤: 1.插入函数 2.初始化函数 3.删除节点 4.把排列展示出来 程序注意 不同函数的指针 不同 头指针定义为全局变量 代码实现截图 # ...

  6. 链表基础知识详解(非常详细简单易懂)

    概述: 链表作为 C 语言中一种基础的数据结构,在平时写程序的时候用的并不多,但在操作系统里面使用的非常多.不管是RTOS还是Linux等使用非常广泛,所以必须要搞懂链表,链表分为单向链表和双向链表, ...

  7. java链表list_java集合之linkedList链表基础

    LinkedList链表: List接口的链接列表实现.允许存储所有元素(包含null).使用频繁增删元素. linkedList方法: void addFirst(E e) 指定元素插入列表的开头 ...

  8. 25. Leetcode 143. 重排链表 (链表-基础操作类-重排链表)

    给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → - → Ln - 1 → Ln 请将其重新排列后变为:L0 → Ln → L1 → Ln - 1 → L2 → Ln ...

  9. 24. Leetcode 61. 旋转链表 (链表-基础操作类-旋转链表)

    给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置.示例 1:输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例 2:输入:hea ...

  10. 23. Leetcode 24. 两两交换链表中的节点 (链表-基础操作类-交换链表)

    给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换).示例 1:输入:head = [1,2,3,4] 输出:[2,1,4 ...

最新文章

  1. CentOS7安装配置redis-3.0.0
  2. Python处理MLDonkey 下载中文文件乱码问题 (2)
  3. 转数组在线 php_2021年最新PHP 面试、笔试题汇总(三)
  4. 《模式识别与机器学习》学习笔记:2.2 多项变量
  5. 自定义ui_如何允许用户自定义UI
  6. 29 | 堆的应用:如何快速获取到Top 10最热门的搜索关键词?
  7. python 创建一个空向量_Python之Django系列-创建第一个应用-5
  8. 面对 10 亿数据量的挑战,如何对系统进行性能优化?
  9. 用R软件绘制中国分省市地图
  10. python绘制国际象棋规则口诀_学好国际象棋必须知道的小口诀技巧
  11. python开发工具geany_geany作为Python的编辑器好用吗?
  12. UBOOT----基于itop4412开发板,从0开始,慢慢摸索UBOOT的启动流程和系统组织结构(一)
  13. 我的世界中国版服务器最新版本,中国版Minecraft更新慢,老玩家喜欢玩国际版,只要是MC都好玩...
  14. shell编程,脚本语言
  15. 耳机接口规则_耳机插头3.5与2.5三段与四段i版与n版等详解
  16. 数据库MySQL-读写分离
  17. QLabel设置背景颜色或字体失效显示“无效样式表”解决办法
  18. 用matplotlib.pyplot绘制甜甜圈图
  19. 泛微的流程数据都保存在数据库了,但是页面显示不全,只显示一点数据
  20. 远程水箱自动检测控制系统

热门文章

  1. 【视频教程】UG NX CAM 加工模块二次开发 视频教程
  2. mysql语法——基于palo数据库
  3. 解决win10桌面图标显示为白色方框
  4. 常见激活函数持续更新)sigmoid Tanh Relu Leaky-ReLU RReLU
  5. 苹果xsmax有高通基带吗_苹果和高通和解后:基带芯片还没换,但被删的动画回来了!...
  6. MAX10片内User Flash的使用
  7. IOS实现扫描二维码,利用系统API实现,看了这篇IOS扫描功能再也不用求人了。
  8. iOS 证书过期影响范围
  9. MATLAB巴特沃斯陷波滤波图像
  10. 通用人工智能可行吗?组合泛化视角漫谈