单链表
类说明
创建空链表
判断是否为空
向前添加
向后添加
向前取
向后取
查找
打印全部
打印全部(迭代)
class LNode:
def __init__(self,elem,next_=None):
self.item = elem
self.next_ = next_
class LList:
def __init__(self):
self.head = None
def is_empty(self):
return self.head is None
def prepend(self,elem):
self.head =LNode(elem,self.head)
def append(self,elem):
if self.head is None:
self.head =LNode(elem)
return
p = self.head
while p.next_ is not None:
p = p.next_
p.next_ = LNode(elem)
def pop(self):
if self.head is None:
raise LinkedListUnderflow("pop")
e = self.head.item
self.head = self.head.next_
return e
def pop_last(self):
if self.head is None:
raise LinkedListUnderflow("pop")
p = self.head
if p.next_ is None:
e = p.item
self.head = None
return e
while p.next_ is not None:
p = p.next_
print(p.item)
e=p.item
p.next_ = None
return e
def find(self,pred):
p = self.head
while p is not None:
if pred==p.item:
return p.item
p=p.next_
def printall(self):
p=self.head
while p is not None:
print(p.item)
print(p.next_)
if p.next_ is not None:
print(',')
p=p.next_
def elements(self):
p = self.head
while p is not None:
yield p.item
p=p.next_
l = LList()
l.prepend(1)
l.prepend(2)
l.printall()
l.pop()
l.pop_last()
l.find(1)
for x in l.elements():
print(x)