刷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. 前端开发之JavaScript

    JavaScript JS是一种脚本语言,浏览器执行,用于渲染HTML网页,实现网页的动画效果. JavaScript的引用方式: 1,在HTML文件中script标签中写JS代码 <scrip ...

  2. Tomcat最佳线程数

    什么是最佳线程数? 为满足更多用户访问需求,可以调整Tomcat线程数,但是不能太大,否则导致线程切换开销,随着用户递增(线程数也随之调整),系统QPS逐渐增加,当用户量达到某个值,QPS并不会增加, ...

  3. C# 单例类

    单例类 有时候我们不要在一个程序中创建太多的实例.只想用一个全局的实例和一个可以访问点.那么我们需要一个单例类. 因为是单例类啦,所以构造函数肯定是私有的. 需要了解的术语 懒汉式 顾名思义.什么时候 ...

  4. H3C TFTP操作示例

  5. Linux USB 和 sysfs

    由于单个 USB 物理设备的复杂性, 设备在 sysfs 中的表示也非常复杂. 物理 USB 设备 (通过 struct usb_device 表示)和单个 USB 接口(由 struct usb_i ...

  6. location对象相关

    JS是由DOM(文档对象模型).BOM(浏览器对象模型).以及ECMA组成,而location对象是BOM中的一个非常重要的对象,所有关于地址栏信息的内容都在这里.了解location对象之前让我们先 ...

  7. Keras lstm 文本分类示例

    #基于IMDB数据集的简单文本分类任务 #一层embedding层+一层lstm层+一层全连接层 #基于Keras 2.1.1 Tensorflow 1.4.0 代码: '''Trains an LS ...

  8. HDU 2899 Strange fuction [二分]

    1.题意:给一个函数F(X)的表达式,求其最值,自变量定义域为0到100 2.分析:写出题面函数的导函数的表达式,二分求导函数的零点,对应的就是极值点 3.代码: # include <iost ...

  9. HFile v2 v3文件结构

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

  10. 自荐一个 element 表单代码生成器

    Element UI 表单设计及代码生成器,可将生成的代码直接运行在基于 Element 的 vue 项目中. github仓库   https://github.com/JakHuang/form- ...