刷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. Python--day38--JoinableQueue解决生产者消费者模型

    ############################# # 在消费者这一端: #每次获取一个数据 #处理一个数据 #发送一个记号:标志一个数据被处理成功 #在生产者这一端: #每一次生成一个数据 ...

  2. Python--day38--进程同步控制的---锁\信号量\事件的方法名

  3. linux I/O 内存分配和映射

    I/O 内存区必须在使用前分配. 分配内存区的接口是( 在 <linux/ioport.h> 定义): struct resource *request_mem_region(unsign ...

  4. tab选项卡平滑滚动vue

    <html lang="en"> <head> <meta charset="UTF-8"> <title>Ti ...

  5. Linux 内核sysfs 文件系统符号连接

    sysfs 文件系统有通常的树结构, 反映它代表的 kobjects 的层次组织. 但是内核中对象 间的关系常常比那个更加复杂. 例如, 一个 sysfs 子树 (/sys/devices )代表所有 ...

  6. 为何D3D11的几个矩阵需要转置?

    在学习D3D11的时候遇到一个问题,事情是这样的: D3D11引入了常量缓存(const buffer)用来实现数据的高速传输,这块儿buffer是CPU Only Write,GPU Only Re ...

  7. apk混淆打包和反编译(转)

    前面有人写过了,我就直接引用了,大家就不乱找了.以后有问题再继续更新. 一.混淆打包.编译 1.Android 代码混淆.http://blog.csdn.net/zjclugger/article/ ...

  8. HFile v2 v3文件结构

    http://blog.csdn.net/map_lixiupeng/article/details/40861791 http://blog.csdn.net/map_lixiupeng/artic ...

  9. 35.python之事件驱动模型

    转载:https://www.cnblogs.com/yuanchenqi/articles/5722574.html 事件驱动模型 上节的问题: 协程:遇到IO操作就切换. 但什么时候切回去呢?怎么 ...

  10. 想突破学习瓶颈,为什么要认真的学一下Dubbo?

    今天有学生在问,在学习dubbo的时候遇到瓶颈了怎么办,一些东西就感觉就在那里,但是,就是碰不到,摸不着,陷入了迷茫,今天在这里,就跟大家讲一下怎么突破这个瓶颈 先自我介绍一下哈,我是鲁班学院的周瑜老 ...