分别是使用了二级指针和一级指针的两种方法,最后会按插入的顺序依次打印1,2,3,4

主要区别在于,使用二级指针,可以在main函数里直接用一个空的Node指针,而一级指针是在main函数里面先添加了一个空的头结点

因为二级指针是传的指针的指针,所以main函数里直接用Node *head  = NULL后 , 传&head是没有问题的,因为传的是head的指针的指针,所以在Insert函数里会修改指针的地址。

而一级指针就不行,如果传进去head的指针之后,最终传回来的还是一开始的结果为NULL的指针地址,相当于是以前常看到的,创建一个函数来交换两个变量,可以通过传指针来修改指针所指向的变量。而我们传的head的指针,相当于这个变量,在函数里无论怎么修改这个指针,最终之前传进去的指针并不会变。

也就是说,如果你要在函数里(比如下面insert函数)改变指针的地址,那就传指针的指针来修改指针的地址。

使用二级指针---insert

#include <iostream>

using namespace std;

class Node {
public:
int data;
Node* next;
}; void Insert(Node** h, int new_data)
{
cout << h << endl;
cout << *h << endl;
Node* newnode = new Node(); Node* last = *h; newnode->data = new_data;
newnode->next = NULL; if (*h == NULL)
{
*h = newnode; return;
} while (last->next != NULL)
{
cout << last << endl;
last = last->next;
cout << last << endl;
} last->next = newnode;
cout << last << endl;
cout << h << endl;
cout << *h << endl;
cout << last->next << endl;
return;
} void print(Node* h)
{
if (h == NULL)
{
return;
} while (h != NULL)
{
cout << h->data <<" ";
h = h->next;
} return;
} int main()
{
Node* head = NULL; Insert(&head, 1);
Insert(&head, 2);
Insert(&head, 3);
Insert(&head, 4); print(head); return 0; }

使用一级指针--insert

#include <iostream>

using namespace std;

class Node {
public:
int data;
Node* next;
}; void insert(Node* h, int new_data)
{
Node* newnode = new Node();
newnode->data = new_data;
newnode->next = NULL; Node* last = h; while (last->next != NULL)
{
last = last->next;
} last->next = newnode;
} void print(Node* h)
{
if (h == NULL)
{
return;
} while (h != NULL)
{
cout << h->data <<" ";
h = h->next;
} return;
} int main()
{
Node* head = new Node();
head->data = 1; insert(head, 2);
insert(head, 3);
insert(head, 4); print(head); return 0;
}

链表--insert的更多相关文章

  1. PHP模拟链表操作

    PHP模拟链表操作 一.总结 1.类成员用的是-> 2.对象节点相连的话,因为是对象,所以不用取地址符号 3.数组传递参数的时候传引用的方法 ,& 二.PHP模拟链表操作 代码一: /* ...

  2. MySQL · 引擎特性 · InnoDB 事务系统

    前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍InnoDB事务子系统,主要包括,事务的启动,事务的提交,事 ...

  3. 带你深入理解STL之List容器

    上一篇博客中介绍的vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,很好的支持了随机存取,但由于是连续空间,所以在中间进行插入.删除等操作时都造成了内存块的拷贝和移动,另外在内存空间 ...

  4. PHP常用算法和数据结构示例

    <?php header("content-type:text/html;charset=utf-8"); $arr=array(3,5,8,4,9,6,1,7,2); ec ...

  5. php常用算法和数据结构

    </pre><pre name="code" class="php"><?php /** * Created by PhpStor ...

  6. nodejs 搭建自己的简易缓存cache管理模块

    http://www.infoq.com/cn/articles/built-cache-management-module-in-nodejs/ 为什么要搭建自己的缓存管理模块? 这个问题其实也是在 ...

  7. 二、SQL的生命周期

    MySQL的sql语句由客户端发出,经过连接和权限验证后,最终达到服务器端,由服务器分配thread线程处理,之后就是要介绍的具体服务器端的thread线程是怎么处理每条sql语句的.[ 了解thre ...

  8. 【Leetcode】【Medium】Reorder List

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...

  9. (C++ STL)list的实现

    #include <iostream> using namespace std; //採用迭代器和空间配置器所实现的双向链表的基本功能 template<class _Ty,clas ...

  10. php实现简单算法2

    php实现简单算法2 去弄php手册,里面有数据结构,有数据结构就好办了,我的算法基础那么好. 而且的话有数据结构的话再配合我脑中的那些算法了,我就都ok啦. 在手册里面搜索php数据结构就好 路径如 ...

随机推荐

  1. [转帖]Kafka之ack机制

    前言 之前的博客里说了,Kafka的消息同步是一种ISR机制,本质上是"完全同步"的一种优化. 都在说,消息被ISR中所有副本都写入才算写入成功.但是这样未免定的太死板了,所以,K ...

  2. [转帖]金仓数据库KWR使用说明

    金仓数据库KWR使用说明 1.KWR性能报告介绍 2.部署KWR性能报告功能 2.1.修改配置文件 2.2.使配置文件中参数生效 2.3.创建KWR扩展 3.使用KWR快照功能 3.1.创建KWR快照 ...

  3. [转帖]jcmd命令详解

    1 基本知识 jcmd 是在 JDK1.7 以后,新增了一个命令行工具. jcmd 是一个多功能的工具,相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计.JFR.内存使用 ...

  4. [转帖]kubernetes calico网络

    https://plantegg.github.io/2022/01/19/kubernetes%20calico%E7%BD%91%E7%BB%9C/ cni 网络 cni0 is a Linux ...

  5. Sysbench 开启超线程/关闭超线程以及容器运行数据库的性能损耗

    Sysbench 开启超线程/关闭超线程性能损耗 摘要 Stress-NG 测试完之后 突然想 使用sysbenchen也进行一次压测 验证一把 超线程对数据的性能影响. 压测命令 ./sysbenc ...

  6. element-ui表格排序

    <el-table :data="TableAwitDoArr" style="width: 100%"> <el-table-column ...

  7. Qt中qreal的坑

    今天在写Qt的时候遇到了一个bug:同样一个方程在PC机上算的结果是11,但在arm-Linux设备上算出来的结果是12,我自己用计算器按出来的结果也是12. 该段程序是这样的: maxnumbar ...

  8. Jupyter Notebook支持Go

    在执行下列命令之前,请确保你已经安装了Go和Jupyter. gophernotes是针对Jupyter和nteract的Go内核,它可以让你在基于浏览器的笔记本或桌面app上交互式地使用Go.下面介 ...

  9. go中channel源码剖析

    channel 前言 设计的原理 共享内存 csp channel channel的定义 源码剖析 环形队列 创建 写入数据 读取数据 channel的关闭 优雅的关闭 M个receivers,一个s ...

  10. 深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)

    深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别.实体.关系.属性抽取实战项目合集(含智能标注) 1.命名实体识别介绍 命名实体识别(Named Entity R ...