数据结构 —— 链表总结
2016-05-25 18:19
405 查看
链表边界的问题只需牢记一点,执行 p->next 的时候要判断 p 是否为 NULL(至少有一个节点),自然执行 p->next->next 的时候要判断 p->next 是否为NULL(至少有两个节点)。
尾部删除改变的是倒数第二个节点的next,需考虑如下的三种情况
空表
表中只有一个节点
一般的表
(2)循环单链表
在链表对象里记录表尾节点更为合适,同时支持 O(1) 的时间进行头插、头删以及尾插。
循环链表的尾插其实就是执行一次头插,再移动尾部指针的位置。
基本知识
尾部插入改变的是最后一个节点的next尾部删除改变的是倒数第二个节点的next,需考虑如下的三种情况
空表
表中只有一个节点
一般的表
class LNode: def __init__(elem, next_=None): self.elem = elem self.next = next_ class LList: def __init__(self): self._head = None
链表变体
(1)持有尾部节点的单链表class LList1(LList): def __init__(self): LList.__init__(self) self._rear = None
(2)循环单链表
class LCList: def __init__(self): self._rear = None
在链表对象里记录表尾节点更为合适,同时支持 O(1) 的时间进行头插、头删以及尾插。
循环链表的尾插其实就是执行一次头插,再移动尾部指针的位置。
相关文章推荐
- 数据结构实验之栈六:下一较大值(二)
- Python 数据结构与算法 —— 链表
- poj 2406 : acm 数据结构Power Strings (KMP)
- POJ 1611 ACM数据结构The Suspects (并查集)
- 数据结构实验5-2
- C/C++、JAVA 数据结构 :双向循环链表
- 字符串操作
- Poj 3320 acm 数据结构 哈希表入门
- 数据结构实验-用C++实现带头结点的循环链表
- java数据结构-Vector
- 【数据结构学习】二叉树
- HDU1702 acm 数据结构 ACboy needs your help again!
- HDU1022 acm 数据结构 Train Problem I
- 每天一点数据结构之二叉树的插入与创建
- 浅谈算法和数据结构: 九 平衡查找树之红黑树
- 数据结构[刷水]
- 《数据结构》3.1双栈--按栈号进行操作
- 常用的数据结构算法
- 《数据结构》3.1双栈结构
- C++ map,set内部数据结构