本人数据库初学者一个,在此记录自己的思考过程,若有疑问以及出错恳请大家一起交流,一起进步!

由于清华大学出版社《C++数据结构与算法》书上并没有给出创建链表的方法,因此在网上查找相关代码,感谢此篇博客https://blog.csdn.net/chixujohnny/article/details/50900504提供相关思路。但对于其中的思想博主并没有详细解答,因此在这里我将围绕着这段代码以个人的一些浅见来说说自己的一些观点。

#include <iostream>
using namespace std;
/* 创建一个单链表 */
struct ListNode{int m_key;ListNode* next;
};
void createList(ListNode* pHead){ListNode* p = pHead;for (int i = 1; i < 10; ++i) {ListNode* pNewNode = new ListNode;pNewNode->m_key = i; // 将新节点的值赋值为ipNewNode->next = NULL;p->next = pNewNode; // 上一个节点指向这个新建立的节点p = pNewNode; // p节点指向这个新的节点}
}
int main(){ListNode* head = NULL;head = new ListNode;head->m_key = 0;head->next = NULL;createList(head);return 0;
}

从main()函数开始,先是定义了一个ListNode结构类head的指针,指向链表的第一个节点,并初始化;其后为head分配内存,初始化类成员,接着就是进入到创建链表的函数中。

1、将pHead的地址赋予一个类的新指针p,此时p的地址与pHead的地址一样,对p操作就是对pHead操作;

ListNode* p = pHead;

2、进入for循环,此时i=1

3、创建一个类的新指针pNewNode,作为中间过程为以后存放新节点提供过渡;

ListNode* pNewNode = new ListNode;

4、赋值,令此时的pNewNode的m_key为1,next地址为null;

pNewNode->m_key = i; // 将新节点的值赋值为i
pNewNode->next = NULL;

5、让指针p的next指向pNewNode,此时,由于第一步,因此pHead的next地址也指向pNewNode。这样就实现了pHead的next指向链表中的第一个节点;

p->next = pNewNode; // 上一个节点指向这个新建立的节点

6、将pNewNode的地址赋予p,即指针p和指针pNewNode指向同一块内存,此时由于pHead的内存是由new来分配的,其地址不由p改变而改变,因此此时p的地址与pHead的地址不一样,对p操作不咋在等同于对pHead操作,也正因为这样,pHead的next地址将永远指向i=1时的pNewNode,即链表中的第一个节点;

p = pNewNode; // p节点指向这个新的节点

7、当i=2时,又用new新建一个pNewNode,此时需要注意,此时的pNewNode与i=1时新建的pNewNode的地址不一样,即为不同的类对象。因此我们可以将i=1时新建的pNewNode人为的称为pNewNode1,i=2时称为pNewNode2;

ListNode* pNewNode = new ListNode;

8、对pNewNode2->m_key与next赋值;

pNewNode->m_key = i; // 将新节点的值赋值为i
pNewNode->next = NULL;

9、将pNewNode的地址赋予p->next 。此时需要注意,由于第6步,p的地址为pNewNode1的地址,因此对p操作就相当于对pNewNode1操作,所以此时pNewNode1的next地址即为pNewNode2的地址,这样就实现了第一个节点的next指向第二个节点。

p->next = pNewNode; // 上一个节点指向这个新建立的节点

10、将pNewNode2的地址赋予p;

p = pNewNode; // p节点指向这个新的节点

11、以此类推。

C++ 详解创建链表过程相关推荐

  1. 线性表详解(静态链表、单链表、双向链表、循环链表)

    目录 申明 1. 线性表的定义 2. 线性表的抽象数据类型 3. 线性表的顺序存储结构 3. 1 顺序存储定义 3. 2 顺序存储方式 3. 3 数据长度与线性表长度区别 3. 4 地址计算方法 4. ...

  2. 不带头节点的链表有哪些缺点_23张图!万字详解「链表」,从小白到大佬!

    链表和数组是数据类型中两个重要又常用的基础数据类型. 数组是连续存储在内存中的数据结构,因此它的优势是可以通过下标迅速的找到元素的位置,而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动,为了解 ...

  3. 30.jvm.gc(GC之详解CMS收集过程和日志分析)

    30.jvm.gc(GC之详解CMS收集过程和日志分析) 30.1.话题引入 30.2.ParNew and CMS 30.3.日志 30.3.1.GC日志初体验 30.3.2.Minor GC 30 ...

  4. Windows系统Git安装教程(详解Git安装过程)

    Windows系统Git安装教程(详解Git安装过程)   今天更换电脑系统,需要重新安装Git,正好做个记录,希望对第一次使用的博友能有所帮助! 获取Git安装程序   到Git官网下载,网站地址: ...

  5. Open3D 区域生长分割:详解Python实现过程

    Open3D 区域生长分割:详解Python实现过程 Open3D是一个专业的开源三维计算机视觉库,支持针对点云数据进行多种类型算法处理及可视化.其中包括基于区域生长分割的算法,可以对点云数据进行自动 ...

  6. Android Studio 安装详解及安装过程中出现的问题解决方案

    Android Studio 安装详解及安装过程中出现的问题解决方案 一,Android Studio安装包下载, 首先到官网下载,就是去Android Studio中文社区官网下载你的平台需要的安装 ...

  7. 计算机开机过程 南桥,详解电脑开机过程

    详解电脑开机过程 1.首先给ATX电源加电,加电后,ATX电源开始输出待机工作电压(SB5V),接着实时时钟开始工作,向CMOS电路和开机电路发送32.768KHZ的实时时钟信号. 2.接着按下电源开 ...

  8. dockerfile详解-dockerfile构建过程解析,dockerfile体系结构保留字解析,案例解析

    Dockerfile详解 1.定义:Dockerfile是用来构建Docker镜像的构建文件,是一系列命令和参数构成的脚本 2.步骤: --手动编写一个dockerfile文件,必须要要符合规范 -- ...

  9. 万字干货!详解JavaScript执行过程

    作者 | FinGet       责编 | 欧阳姝黎 JS代码的执行,主要分为两个个阶段:编译阶段.执行阶段.本文所有内容基于V8引擎. 前言 v8引擎 v8引擎工作原理: V8由许多子模块构成,其 ...

最新文章

  1. uniapp(一) 项目架构,封装
  2. 网络营销激烈竞争下,网站被黑了怎么办?
  3. 【2016年第6期】数据产品在线定制平台的探索实践
  4. RabbitMQ架构模型(二)
  5. python对数组分类_有效地从字典Python中对数组进行分类
  6. 【位运算经典应用】 N皇后问题
  7. cc1: all warnings being treated as errors
  8. JDK的Proxy技术实现AOP,InvocationHandler和Proxy详解——Spring AOP(三)
  9. java 逆矩阵_用Java实现求逆矩阵
  10. matlab解坐标方程,matlab程序(解泊松方程)
  11. 欧美剧集观看最佳索引 US SHOWS GUIDE 【2005-12-27 转verycd】
  12. 7-3 sdust-Java-字符串集合求并集 (25 分)
  13. 天然气阶梯是按年还是按月_天然气阶梯价划分时间的节点怎么计算,是以每年为一个单位吗...
  14. 关于excel选定任意行截图的操作
  15. 如何在IDEA中连接mysql数据库
  16. Android Studio开发——蓝牙聊天功能
  17. u盘在电脑读不出来,但别的可以读,别的u盘在我电脑又可以识别怎么回事?
  18. 易语言 用精易的网页_访问 请求https的时候返回不了数据
  19. 「OceanBase 4.1 体验」|国产分布式数据库不好用?别再打脸了
  20. java前端接口怎么写_如何写出优雅的后端API接口?

热门文章

  1. 卫浴洁具金属件防霉措施
  2. Odoo 16 企业版手册 - 销售管理之产品配置
  3. Redis 分布式锁|从青铜到钻石的五种演进方案
  4. VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
  5. 普罗米修斯监控系统_一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式...
  6. .net中利用代理实现AOP
  7. 3D数学之透视投影矩阵的推导
  8. 大学老师和学生的理想相处模式探究
  9. 大数据开发 -------------实习面试经历
  10. 面试必问_你在开发过程中有没有遇到什么棘手的问题2,是怎么解决的、