[面试] 算法(六)—— 链表
来源:互联网 发布:网络安全大数据分析 编辑:程序博客网 时间:2024/05/26 20:23
链表是一种动态数据结构
链表是一种动态数据结构,之所以称之为动态,是因为在创建链表时,无需知道链表的长度(这和数组形成鲜明的对比)。
当插入一个结点时,我们只需为新结点分配内存,然后调整指针的指向来确保新节点被链接到链表当中。内存分配不是在创建链表时一次性完成的,而是每添加一个结点分配一次内存。
由于没有闲置的内存,链表的空间效率比数组高。
定义
单向链表的结点定义:
struct ListNode{ int val; ListNode* next;};
单向链表的尾插(需遍历)
void AddTail(ListNode** pHead, int val){ // 由上文的链表的动态性可知,创建结点的动作在每次插入操作时执行 ListNode* pNew = new ListNode; pNew->val = val; pNew->next = NULL; // 当前链表是否为空表 if (*pHead == NULL) *pHead = pNew; else { // 遍历 ListNode* pNode = *pHead; while (pNode->next) pNode = pNode->next; pNode->next = pNew; }}
链表元素的删除:
void RemoveNode(ListNode** pHead, int val){ if (pHead == NULL || *pHead == NULL) return; ListNode* pToBeDel = NULL; // 记录将被删除的结点 if (*pHead -> val == val) { pToBeDel = *pHead; *pHead->next = *pHead->next; } else { ListNode* pNode = *pHead; while (pNode->next && pNode->next->val != val) pNode = pNode->next; if (pNode->next && pNode->next->val == val) { pToBeDel = pNode->next; pNode->next = pNode->next->next; } } if (pToBeDel) { delete pToBeDel; pToBeDel = NULL; }}
0 0
- [面试] 算法(六)—— 链表
- 面试算法(六)用两个栈实现队列
- 【笔试/面试】MFC(六)—— 菜单
- 面试笔试问题总结(六)—数据库
- JAVA面试(六)
- C++面试(六)
- 前端面试(六)
- JavaWeb面试(六)
- 算法导论(六)——图算法
- [面试] 算法(一) —— Str2Int
- [面试] 算法(八)—— 树
- 面试算法(一)—朴素贝叶斯
- 程序员面试问题(六)
- Android面试(六)JAVA
- 面试算法——排序
- C#编程之经典算法——排序(六)
- 基础算法系列(六)——堆排序
- Java加密技术(六)——数字签名算法DSA
- << React Native 入门与实战>>----第2章 React Native开发基础
- js BOM对象
- 代码管理工具
- 数据库问题
- 程序员经验
- [面试] 算法(六)—— 链表
- window.open窗口显示在屏幕中央
- mysql command line client 使用命令
- HDU 3790最短路径问题
- BZOJ 4423 AMPPZ 2013 Bytehattan 平面图 并查集
- 将导航栏固定在窗口的顶部
- css div靠最下
- Android新手入门2016(15)--Gallery画廊
- Android基础-------button的三种定义方式