一、单链表实现
class LNode:
def __init__(self, elem, next_=None):
self.elem = elem
self.next = next_
class LinkedListUnderUnderflow(ValueError):
pass
class LList:
def __init__(self) -> None:
self.head = None
def is_empty(self):
return self.head is None
def prepend(self, elem):
self.head = LNode(elem, self.head)
def pop(self):
if self.head is None:
raise LinkedListUnderUnderflow("in pop")
e = self.head.elem
self.head = self.head.next
def for_each(self):
temp_list = []
p = self.head
while p:
temp_list.append(p.elem)
p = p.next
return temp_list
def append(self, elem_):
if self.head is None:
self.head = LNode(elem_)
return
p = self.head
while p.next:
p = p.next
p.next = LNode(elem_)
def pop_last(self):
if self.head is None:
raise LinkedListUnderUnderflow("in pop_last")
if self.head.next is None:
e = self.head.elem
self.head = None
return e
p = self.head
while p.next.next:
p = p.next
e = p.next.elem
p.next = None
return e
def reverse(self):
new_queen = None
while self.head:
pointer = self.head
self.head = pointer.next
pointer.next = new_queen
new_queen = pointer
self.head = new_queen
if __name__ == '__main__':
llist = LList()
for value in range(10):
llist.append(value)
llist.pop_last()
ret = llist.for_each()
print(ret)
llist.reverse()
ret = llist.for_each()
print(ret)
二、带为节点的单链表实现(继承自LList)
from LList import *
class LList1(LList):
def __init__(self) -> None:
LList.__init__()
self.rear = None
def prepend(self, elem):
if self.head:
self.head = LNode(elem, self.head)
else:
self.head = LNode(elem)
self.rear = self.head
def append(self, elem):
if self.head is None:
self.head = LNode(elem, self.head)
self.rear = self.head
else:
self.rear.next = LNode(elem)
self.rear = self.rear.next
def pop_last(self):
if self.head is None:
raise LinkedListUnderUnderflow("pop_last")
p = self.head
if p.next is None:
e = self.head.elem
self.head = None
return e
while p.next.next:
p = p.next
e = p.next.elem
p.next = None
self.rear = p
return e
if __name__ == '__main__':
llist = LList()
for i in range(1, 11):
llist.append(i)
print(llist.for_each())
print(llist.pop_last())
print(llist.for_each())