链表与指向指针的指针应用
2012-06-11 23:38
316 查看
示例代码如下,假设单链表如下:
typedef struct Node{ ElemType data; Node *next; }Node; typedef struct Node *LNodelist;
现需要初始化链表头结点,设函数为:
void create(Node *list) { list = (Node *)malloc(sizeof(Node)); if (NULL == list) { ……; } return; }
以上函数为经典常犯错误,今天还犯了以上错误。通过对以上函数当在下面main函数中调用时,简单情况下不会发生编译错误,但是运行结果却会发现调用create(first)函数后,并未对头结点进行了初始化分配了空间,仍然为NULL。
int main(void) { Node *first = NULL; create(first); return 0; }
针对以上问题,可以做如下解决,引入指向指针的指针:
void create(Node **list) { Node *p = NULL; p = (Node *)malloc(sizeof(Node)); if (NULL ==p) { ……; } *list = p; }
主函数中调用相应改为:
int main(void) { Node *first = NULL; create(&first); return 0; }或者还可以改为:
Node *create() { Node *p = Null; p = (Node *)malloc(sizeof(Node)); if(p == NULL) {……} return p; }main函数调用为:
int main(void) { Node *first = NULL; first = create(); return 0; }
相关文章推荐
- C++指向结构体变量的指针与链表结构的关系应用
- 面试题 单向链表(无头结点)一个指针指向其中的一个结点,如何删除这个结点?
- 二级指针的应用-有关链表的一些小题
- 学生信息管理系统——指针和链表的应用
- 牛客原题 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 指针p,q,r依次指向某循环链表中三个相邻的结点,交换结点*q,*r在表中次序的程序段是
- 链表中指针指向未声明的可怕之处
- 二叉树层序遍历应用:要求将所有结点加上一个m_pNext指针,指向同层右侧的结点,右侧若无结点则指向NULL,写出其中的Connect函数。
- 【LeetCode】Swap Nodes in Pairs 链表指针的应用
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 链表的排序(交换指针指向)
- 快慢指针在链表中的应用
- (Java实现)输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 指向结构体的指针数组,应用
- 剑指Offer Java版 双指针在链表中的应用
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 编码实现环状单向链表(尾指针直接指向头指针,中间没有空节点),去除连续的重复元素的操作。
- 给定一个单向链表,目前已经有一个指针,指向某一个节点(记作A),现在要删除这个节点A,如何操作。
- 引用、指针和指向指针的指针在函数形参中的应用
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)