class Node(object):
'''双向链表结点'''
def __init__(self,item):
self.item = item
self.prev = None
self.next = None
class Node(object):
'''双向链表结点'''
def __init__(self,item):
self.item = item
self.prev = None
self.next = None
def func(funct):
def war(self, *args, **kwargs):
if self.is_empty():
print(self.is_empty())
return '链表为空!'
res = funct(self,*args,**kwargs)
return res
return war
class BilateralLinkList(object):
'''双向链表'''
def __init__(self):
self._head = None
def is_empty(self):
'''判断链表是否为空'''
if self._head is None:
return True
@func
def length(self):
'''获取链表得长度'''
cur = self._head
count = 0
while cur.next != self._head:
count += 1
cur = cur.next
return count
@func
def items(self):
'''遍历链表'''
cur = self._head
while cur.next is not None:
yield cur.item
cur = cur.next
yield cur.item
def add(self,item):
'''给链表头插入数据'''
node = Node(item)
cur = self._head
if self.is_empty():
self._head = node
else:
node.next = self._head
self._head.prev = node
self._head = node
@func
def append(self,item):
'''给双向链表尾部添加元素'''
node = Node(item)
cur = self._head
while cur.next is None and cur.prev is not None:
cur.next = node
node.prev = cur
@func
def insert(self,index,item):
'''给指定位置插入值'''
node = Node(item)
cur = self._head
pre = None
if cur.next is None and cur.prev is None:
self.add(item)
elif cur.next is None and cur.prev is not None:
self.append(item)
else:
for i in range(index - 1):
cur = cur.next
node.prev = cur
node.next = cur.next.next
cur.next = node
@func
def remove(self,item):
'''删除链表的值'''
cur = self._head
pre = None
if cur.item == item:
if cur.next is None:
self._head = None
return
else:
cur = cur.next
cur.prev = None
self._head = cur
return
while True:
if cur.item == item:
if cur.next is None:
cur.prev = None
pre.next = None
return
else:
pre.next = cur.next
cur.next.prev = pre
return
else:
pre = cur
cur = cur.next
@func
def find(self,item):
return item in self.items()
if __name__ == '__main__':
dd = BilateralLinkList()
for i in range(6):
dd.add(i)
dd.add('qwe1')
dd.remove(0)
dd.remove(5)
print(list(dd.items()))
print(dd.find(3))