通过二级指针插入节点
来源:互联网 发布:win10默认网卡mac地址 编辑:程序博客网 时间:2024/06/07 17:49
这是在编程珠玑的习题上看到的,P214第四题
节点的定义如下:
struct node{int val;node *next;node(int v,node *p){val=v; next=p;}};另外初始化的过程中,初始化头结点,head=new node(maxval,0)其中maxval表示一个最大值
通常的插入函数都会这样来写:
void insert(int t){node* before=NULL;node* p=head;while(p->val<t){before=p;p=p->next;}if(p->val==t)return;if(before==NULL)head=new node(t,head);elsebefore->next=new node(t,p);}但是,上述过程会分情况(在链表最前面插入节点和在链表中插入节点)来讨论
下面就让我们来看一下二级指针的威力:
void insert(int t){Node **p=&head;for(;(*p)->val<t;p=&((*p)->next));if((*p)->val==t)return;*p=new node(t,*p);}最关键的一句就是*p=new node(t,*p),首先明确*p指的是第一个比t大的元素,这个过程分为以下步骤:
1)new node(t,*p):新建了一个节点,元素为t,下一个元素为比它大的元素*p
2)将新节点的地址赋值给*p
我通过图片讲解一下这个过程:
目标是向链表1,5中插入元素3,这时*p的位置在5这个元素上,步骤1)很好理解,关键是步骤2),当我们修改了*p的时候,有一点特别重要的是1的next存的是5的地址也就是*p并且*p存在变量p中,*p改变后1指向的元素也会随之改变,p中放的元素相当于是3的地址,这样就将1-3连在了一起。
- 通过二级指针插入节点
- 利用二级指针删除节点
- 用二级指针求解二叉树根节点
- 用二级指针实现单链表插入操作
- 如何通过二级指针修改变量
- 用二级指针删除单链表的一个节点
- 利用二级指针删除单向链表节点
- 关于使用二级指针删除链表节点的分析
- 【C与指针】有序单链表插入节点
- 利用二级指针插入和删除单向链表
- 二级指针
- 二级指针
- 二级指针
- 二级指针
- 二级指针
- 二级指针
- 二级指针
- 二级指针
- 黑马程序员--04.多线程--02.【run()和start()】【线程的运行状态】【获取想成对象及其名称】
- hdu 2821 dfs
- Tiny210(S5PV210) U-BOOT(二)----配置时钟频率基本原理
- UVA216 Getting in Line
- AtomicInteger在实际项目中的应用
- 通过二级指针插入节点
- 想开发Android应用吗?从这里开始吧!
- ASP.NET WebService开发指南
- Hibernate学习笔记(1)——Hibernate与JDBC的比较
- 用sharp develop 开发网站
- JVM 加载类的机制
- mysql procedure
- 指针变量的运算
- 【startActivityForResult】startActivityForResult 和 onActivityResult 问题