刷LeetCode题目,需要用到链表的知识,忽然发现自己对于链表的插入已经忘得差不多了,以前总觉得理解了记住了,但是发现真的好记性不如烂笔头,每一次得学习没有总结输出,基本等于没有学习。连复盘得机会都没有,花了一个上午得时间重新整理了下,如下:

单链表

单链表应该是最简单得链式结构了,应用广泛也十分简单,这里需要注意单链表常用得前序插入后序插入,要从根本原理上理解

1. 后序插入

下面分析后续插入得流程:

  step1: 初始化一个Head节点

  step2: 创建第一个Node1,后续插入得意思每次一个新的节点应该是当作原始链表得尾巴节点插入,那么很明显Node1->next = NULL;现仅有Head节点和Node1节点,Node1节点还是尾巴,那么接下来怎么作呢?很明显Head->next = Node1;第一步插入操作完成。由于每次插入均要插入到尾巴去,那么我们必须要知道尾巴得位置才可以,不然你怎么插入,因此在这里我们引入了phead变量,这个变量应该要时刻指向链表得尾巴节点。由于最开始是是指向head得,所以起了这么个变量

  step3:创建第二个节点Node2,同理,Node2->next = 0; phead是指向链表尾巴得节点,phead->next = Node2; 到此完成插入,为了保证下次插入,phead = Node2;

  step4:同理创建添加。

  …………

代码如下:

 void Solution::creatList(ListNode *head)
{
/*
后续插入
*/
ListNode *phead = head;
for(int i=; i<; i++)
{
ListNode *node = new ListNode;
node->val = i;
node->next = NULL;
phead->next = node;
phead = node;
}
}

后续插入得要点:

  1) 每次插入均是在当前列表得尾巴插入,所以”尾巴->next = Node(new)“,一步插入成功

  2) 一次插入成功后,为了保证下次还能插入成功,你要给一个临时指针变量phead在插入成功,将其指向最后一个节点,

  3) 上述两个要点为一次完整一次插入,并且保证了下次插入也可成功

  4) 结合上图,Head之后一次是Node1,Node2,...,即后续插入

2. 前序插入

前序插入得流程:

  Step1: 创建头节点,Head;前序插入得关键在于时刻改变Head->next得指向

  Step2: 创建Node1节点,让Node1->next = Head->next;这样得操作,我们备份了原Head->next得指向,这样也就解放了Head->next,然后令Head->next = Node1;到此就完成了一次插入

  Step3: 创建Node2节点,让Node2->next = Head->next(此时Head->next指向得是Node1);这也就把Node2和Node1链接起来了,然后再让Head->next = Node2; 再次完成插入

  Step4: 可以看到,Head下依次是Node2, Node1,每次插入都在上次节点得前面,即为前序插入

前序插入得要点:

  1. 时刻改变Head->next得指向

代码如下:

 void Solution::creatList(ListNode *head)
{
/*
前序插入
新建个节点指向原head节点的指向,然后让head->next指向新建的node
*/ ListNode * phead = head;
for(int i=; i<; i++)
{
ListNode *node = new ListNode;
node->val = i;
node->next = phead->next;
phead->next = node;
}
}

以上为单链表前插和后插得知识点总结,仅作备份参考。

【C&数据结构】---关于链表结构的前序插入和后序插入的更多相关文章

  1. (原)neuq oj 1022给定二叉树的前序遍历和后序遍历确定二叉树的个数

    题目描述 众所周知,遍历一棵二叉树就是按某条搜索路径巡访其中每个结点,使得每个结点均被访问一次,而且仅被访问一次.最常使用的有三种遍历的方式: 1.前序遍历:若二叉树为空,则空操作:否则先访问根结点, ...

  2. 数据结构学习-BST二叉查找树 : 插入、删除、中序遍历、前序遍历、后序遍历、广度遍历、绘图

    二叉查找树(Binary Search Tree) 是一种树形的存储数据的结构 如图所示,它具有的特点是: 1.具有一个根节点 2.每个节点可能有0.1.2个分支 3.对于某个节点,他的左分支小于自身 ...

  3. 《Java数据结构》链表结构(单向链表,双向链表)

    单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的:其中每个结点都有指 ...

  4. POJ 2255 Tree Recovery——二叉树的前序遍历、后序遍历、中序遍历规则(递归)

    1.前序遍历的规则:(根左右) (1)访问根节点 (2)前序遍历左子树 (3)前序遍历右子树 对于图中二叉树,前序遍历结果:ABDECF 2.中序遍历的规则:(左根右) (1)中序遍历左子树 (2)访 ...

  5. 二叉树(前序,中序,后序,层序)遍历递归与循环的python实现

    二叉树的遍历是在面试使比较常见的项目了.对于二叉树的前中后层序遍历,每种遍历都可以递归和循环两种实现方法,且每种遍历的递归实现都比循环实现要简洁.下面做一个小结. 一.中序遍历 前中后序三种遍历方法对 ...

  6. POJ 1240 Pre-Post-erous! && East Central North America 2002 (由前序后序遍历序列推出M叉树的种类)

    题目链接 问题描述 : We are all familiar with pre-order, in-order and post-order traversals of binary trees. ...

  7. 二叉树:前序遍历、中序遍历、后序遍历,BFS,DFS

    1.定义 一棵二叉树由根结点.左子树和右子树三部分组成,若规定 D.L.R 分别代表遍历根结点.遍历左子树.遍历右子树,则二叉树的遍历方式有 6 种:DLR.DRL.LDR.LRD.RDL.RLD.由 ...

  8. PAT甲题题解-1119. Pre- and Post-order Traversals (30)-(根据前序、后序求中序)

    (先说一句,题目还不错,很值得动手思考并且去实现.) 题意:根据前序遍历和后序遍历建树,输出中序遍历序列,序列可能不唯一,输出其中一个即可. 已知前序遍历和后序遍历序列,是无法确定一棵二叉树的,原因在 ...

  9. [二叉树建树]1119. Pre- and Post-order Traversals (30) (前序和后序遍历建立二叉树)

    1119. Pre- and Post-order Traversals (30) Suppose that all the keys in a binary tree are distinct po ...

随机推荐

  1. 关于 vue 生命周期 钩子函数 事件

    vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染->更新->渲染.卸载等一系列过程,我们称这是vue的生命周期. 通俗的将就是vue实例从创建到销毁 ...

  2. 51nod1327 棋盘游戏

    远古大坑 神仙DP状态设计题 https://blog.csdn.net/white_elephant/article/details/83592103 从行的角度入手,无论如何都要状压 每列最多放一 ...

  3. 【git】Git回退代码到指定版本

    1. 查看所有的历史版本,获取你git的某个历史版本的id, git log2. 回退本地代码库:git reset --hard ID3. 推送到远程服务器:git push -f -u origi ...

  4. linux 在 /proc 里实现文件

    所有使用 /proc 的模块应当包含 <linux/proc_fs.h> 来定义正确的函数. 要创建一个只读 /proc 文件, 你的驱动必须实现一个函数来在文件被读时产生数据. 当 某个 ...

  5. 【GYM102091】2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest

    A-Evolution Game 题目大意:有$n$个不同的野兽,定义第$i$ 个野兽有 $i$ 个眼睛和 $h[i]$ 个角,你可以任意从中选择一个野兽进行进化,每次进化角数量必须增加,而且进化后要 ...

  6. 螺旋矩阵O(1)根据坐标求值

    传送门 洛谷2239 •题意 从矩阵的左上角(第11行第11列)出发,初始时向右移动: 如果前方是未曾经过的格子,则继续前进,否则右转: 重复上述操作直至经过矩阵中所有格子. 根据经过顺序,在格子中依 ...

  7. Cisco DNA网络POC

    角色名词解释 拓扑图 集成ISE

  8. Elasticsearch介绍和安装

    Elasticsearch介绍和安装 软件包: 链接:https://pan.baidu.com/s/1O_C0JQGfF8sC_OtcCCLNoQ 提取码:3iai 1.1.简介 1.1.1.Ela ...

  9. jsqlparser和calcite和druid功能对比

    需求分析:(用其它方法替代metabase中的某些功能)功能1.通过对sql查询语句的分析,得到所有表名,以及所有表的字段名,字段类型,字段注解信息.功能2.在sql语句执行查询前,校验sql语句是否 ...

  10. webapp开发之IIS进程调试

    1.背景 1.当我的手机连接电脑的时候想要调试居然连接不上,之后我将项目发布之后才可以请求(同一局域网下) 2.你们不觉得发布到IIS再附加进程太烦了么?看了看网上全是这种方法,这不科学!VS已经提供 ...