C++链表插入,为什么头节点必须是二位指针
2017-04-17 15:54
288 查看
C++中正确插入链表节点的代码如下:
这里为什么一定要把把链表头指针定义为二维指针???
首先了解一下指针的基本概念:
C++中函数参数传递的知识点
传值引用和地址引用;
如果函数定义为:
void printValueAdd(int &a)
{
cout << (&a) << endl;
}
加&,则调用该函数的变量a为地址引用,即用的为同一个变量。
void printValueAdd(int a)
{
cout << (&a) << endl;
}
没有&符号,则为传值引用。以函数调用时候会生成一个临时变量用来保存实参的值。
知道了以上两点,步入正题:
void addListNode(ListNode pHead**, int value)
当头指针为空的情况下执行*pHead = pNew;实际是直接改变了一维指针的指向,函数执行结束后,形参消失,但是一维指针中的内容已经发生了变化。
如果采用一维指针进行插入链表代码如下:
内存
结构如下
当头节点为空的情况下执行*pHead = pNew;这里修改的只是形参一维指针的指向,函数执行完毕,形参消失,实参并没有改变。
学习编程最美的地方是可以通过编码来验证自己的经过思考的想法,很棒。
struct ListNode { int m_value; ListNode * m_next; }; void addListNode(**ListNode ** pHead**, int value) { ListNode * pNew = new ListNode(); pNew->m_value = value; pNew->m_next = NULL; if (*pHead == NULL) { *pHead = pNew; } else { ListNode * pNode = *pHead; while (pNode->m_next != NULL) { pNode = pNode->m_next; } pNode->m_next = pNew; } }
这里为什么一定要把把链表头指针定义为二维指针???
首先了解一下指针的基本概念:
C++中函数参数传递的知识点
传值引用和地址引用;
如果函数定义为:
void printValueAdd(int &a)
{
cout << (&a) << endl;
}
加&,则调用该函数的变量a为地址引用,即用的为同一个变量。
void printValueAdd(int a)
{
cout << (&a) << endl;
}
没有&符号,则为传值引用。以函数调用时候会生成一个临时变量用来保存实参的值。
知道了以上两点,步入正题:
void addListNode(ListNode pHead**, int value)
当头指针为空的情况下执行*pHead = pNew;实际是直接改变了一维指针的指向,函数执行结束后,形参消失,但是一维指针中的内容已经发生了变化。
如果采用一维指针进行插入链表代码如下:
void addListNodeForOneLevvel(ListNode * pHead, int value) { ListNode * pNew = new ListNode(); pNew->m_value = value; pNew->m_next = NULL; if (pHead == NULL) { pHead = pNew; } else { ListNode * pNode = pHead; while (pNode->m_next != NULL) { pNode = pNode->m_next; } pNode->m_next = pNew; } }
内存
结构如下
当头节点为空的情况下执行*pHead = pNew;这里修改的只是形参一维指针的指向,函数执行完毕,形参消失,实参并没有改变。
学习编程最美的地方是可以通过编码来验证自己的经过思考的想法,很棒。
相关文章推荐
- C++链表插入节点
- c++基础之插入和删除链表节点
- 单向链表末尾插入一个节点(指向指针的指针该怎样理解)
- 【C与指针】有序单链表插入节点
- 链表排序交换节点为什么还得单独交换next指针?
- 【c/c++】单链表、头指针、头结点、首元节点
- 为什么链表的next指针也要用节点类型 不是存的是地址吗
- 复制含有随机指针节点的链表——C++实现
- 为什么无返回值的链表的插入操作头结点一定要用指向指针的指针
- 链表中头和尾节点/指针的常规用法:插入、删除、遍历
- 链表指针新理解以及插入里链表节点新方法
- C++中链表的创建、输出、节点删除、节点插入、翻转、清空
- 【算法之链表(三)】单链表中,在仅允许使用一个指针的情况下,在指定的节点前面插入以及删除一个节点
- 给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针
- C++ 单链表创建、插入和删除
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 466. 链表节点计数 (count-linked-list-nodes)(c++)----lintcode面试题之链表
- 451. 两两交换链表中的节点(swap-nodes-in-pairs)(c++)----lintcode面试题之链表
- PHP实现双链表删除与插入节点的方法示例