LList1的定义:传送门
from LList1 import *
# 带尾节点的双向链表
class DLNode(LNode):
def __init__(self, elem, prev_=None, next_=None):
LNode.__init__(self, elem, next_)
self.prev = prev_
class DLList(LList1):
def __init__(self) -> None:
LList1.__init__(self)
# 前端插入
def prepend(self, elem_):
p = DLNode(elem_, None, self.head)
if self.head is None:
self.rear = p
else:
p.next.pre = p
self.head = p
# 后端插入
def append(self, elem_):
p = DLNode(elem_, self.rear, None)
if self.head is None:
self.head = p
else:
p.prev.next = p
self.rear = p
# 前端弹出
def pop(self):
p = self.head
if p is None:
raise LinkedListUnderUnderflow("in pop")
e = self.head.elem
if p.next is None:
self.head = None
else:
self.head = self.head.next
self.head.prev = None
return e
# 后端弹出
def pop_last(self):
p = self.head
if p is None:
raise LinkedListUnderUnderflow("in pop_last")
e = self.head.elem
self.rear = self.rear.prev
if self.rear is None:
self.head = None
else:
self.rear.next = None
return e
# 遍历
def generate_list(self):
temp_list = []
p = self.head
while p:
temp_list.append(p.elem)
p = p.next
return temp_list
if __name__ == '__main__':
dllist = DLList()
for i in range(1, 4):
dllist.append(i)
print(dllist.generate_list())
print(dllist.pop())
print(dllist.generate_list())
print(dllist.pop_last())
print(dllist.generate_list())