Python双向链表及函数功能代码实现
#代码实现双向链表by Fan
#变量指向的是节点整体,而不是节点的属性如prev、next
class Node(object):
#定义节点
def __init__(self,item):
self.item = item
self.prev = None
self.next = None
class DoubleLinkList(object):
# 定义双向链表
def __init__(self,node = None):
self._head = node
# 判空函数
def is_empty(self):
print(self._head == None)
# 获取链表长度
def length(self):
cur = self._head
count = 0
while cur != None:
cur = cur.next
count += 1
return count
#遍历双向链表
def travel(self):
cur = self._head
while cur != None:
print(cur.item, end="")
cur = cur.next
#头部插入
def add(self,item):
node = Node(item)
if self._head == None:
self._head = node
else:
node.next = self._head
self._head = node
node.next.prev = node
#尾部插入
def append(self,item):
node = Node(item)
cur = self._head
if self._head == None:
self._head = node
else:
while cur.next != None:
cur = cur.next
cur.next = node
node.prev = cur
#指定位置插入
def insert(self,pos,item):
if pos < 1:
self.add(item)
elif pos > (self.length() - 1):
self.append(item)
else:
node = Node(item)
cur = self._head
count = 0
while count < pos:
cur = cur.next
count += 1
cur.prev.next = node
node.prev = cur.prev
node.next = cur
cur.prev = node
#查找特定元素是否存在
def search(self,item):
cur = self._head
while cur != None:
if cur.item == item:
print("在")
return True
else:
cur = cur.next
print("不在")
return False
#删除某个特定元素
def shanchu(self,item):
cur = self._head
while cur != None:
if cur.item == item:
#判断该节点是否为头节点
if cur == self._head:
self._head = cur.next
cur.next.prev = None
return True
# 判断该节点是否为尾节点
elif cur.next == None:
cur.prev.next = None
return True
else:
cur.prev.next = cur.next
cur.next.prev = cur.prev
return True
else:
cur = cur.next
print("该元素不存在")