静态链表的优缺点
优点:
- 在插入和删除操作时,只需要修改被删节点上一节点的链接地址,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。
缺点:
- 没有解决连续存储分配带来的表长难以确定的问题。
- 失去了顺序存储结构随机存取的特性。
#创建节点
class LNode:
def __init__(self,elem,next_ = None):
self.elem = elem
self.next = next_
#创建链表
class LList:
def __init__(self): #初始化表头变量
self._head = None
def preppend(self,elem): #给表头赋值
self._head = LNode(elem,self._head)
def extended(self,num):
p = self._head
for i in range(2,num+1):
p.next = LNode(i)
p = p.next
def append(self,elem): #在表尾插入元素
if self._head is None:
self._head = LNode(elem)
p = self._head
while p.next is not None:
p = p.next
p.next = LNode(elem)
def for_each(self): #遍历链表并打印
p = self._head
while p is not None:
print(p.elem)
p = p.next
def getElem(self,index): #索引
if not index > 0:
raise ValueError('Index should over 0')
p = self._head
while p is not None and index-1>0:
index = index-1
p = p.next
return p.elem
def insert_indx(self,elem,index): #按位插入元素
if not index > 0:
raise ValueError('Index should over 0')
p = self._head
while p is not None and index-2>0:
index = index-1
p = p.next
if p is not None:
t = LNode(elem)
t.next = p.next.next
p.next = t
else:
raise ValueError('Index is over the length of LinkedList')
代码来源