C语言实现链表之双向链表(七)尾结点后插入结点
2015-11-24 17:22
239 查看
C语言实现链表之双向链表(七)尾结点后插入结点
上一篇文章给出了删除头结点的函数,本篇文章将给出在尾结点后插入结点的函数。注意双向链表中前向指针的处理,与单向链表对比学习一下。/*============================================================================== * 操作 :在尾结点之后加入一个新结点 * 操作前:pHeadNode为链表的头指针,ListData为待加入的结点数据元素 * 操作后:数据元素为ListData的结点被加到尾结点后面,成功返回头结点,否则返回NULL ==============================================================================*/ MyListNode* InsertTailNode(MyListNode* pHeadNode, MyListData ListData) { MyListNode* pListNodeTmp = pHeadNode; MyListNode* pListNodeTmp1 = NULL; // 判断是否有链表输入 if(pHeadNode == NULL) { fprintf(stderr, "There is no list.\n"); return NULL; } // 为新增结点分配内存 pListNodeTmp1 = MallocMemInitNode(pListNodeTmp1); if(pListNodeTmp1 == NULL) { fprintf(stderr, "The new node's memory allocating defeat.\n"); return NULL; } pListNodeTmp1->sNodeData = ListData; // 将指针移至尾结点 while(pListNodeTmp->pNextNodeAddr != NULL) { pListNodeTmp = pListNodeTmp->pNextNodeAddr; } pListNodeTmp ->pNextNodeAddr = pListNodeTmp1; pListNodeTmp1->pPrevNodeAddr = pListNodeTmp; return pHeadNode; }
强调几点:
(1)该函数依旧调用了MallocMemInitNode()函数用来分配内存,但是数据是由函数传入的;
(2)该函数依旧进行了错误判断和错误处理;
(3)记得返回头结点。
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数