1 单链表的简单变形
前言:
链表的缺点是尾端加入元素的操作效率很低,因为这时只能从表头开始查找,直到找到表单最后一个结点,而后才能链接新结点
我们可以改进一下,提高尾端插入元素的效率。
下图给了一种可行的设计,表对象增加一个尾结点引用域。有个这个域,只需常量时间就能找到尾结点,在表尾加入新元素的操作就可能做到O(1)
初始化和变动操作
我们用类LList1() 继承前面讲的LList(),在LList1的初始化函数中,应该首先初始化LList对象的那些数据域。最合理且方便的方式是self对象调用LList类的初始化函数。
现在还要初始化一个尾结点的引用域。由于是作为内部数据域,用_rear作为域名,也初始化为None
def __init__(self):
LList.__init__(self):
self._rear = None
前端插入操作:
操作方式和普通链表一样,但是现在要考虑尾结点的引用域的设置:如果原来是空表,新加入的第一个结点也是最后一个结点。
def prepend(self, elem):
if self._head is None:
self._head = LNode(elem, self._head)
self._rear = self._head
else:
self._head = LNode(elem