提示:如果有错误请各位道友指正,谢谢。
双向链表-python 的表达形式
前言
链表比较基础,是算法与结构必学的内容,下面我贴出python的代码。(如果需要了解其定义,请自行百度,谢谢。)
代码如下(示例):
class SingleNode(object):
def __init__(self, elem):
self.elem = elem
self.next = None
self.pre = None
class LinkedListTwoway(object):
def __init__(self):
self.__head = None
def is_empty(self):
return self.__head == None
def add(self, elem):
"""链表头部添加元素,头插法"""
node = SingleNode(elem)
if self.is_empty():
self.__head = node
else:
# 待插入节点后的指向源头结点
node.next = self.__head
self.__head.pre = node
self.__head = node
def append(self, elem):
node = SingleNode(elem)
cur = self.__head
if self.is_empty():
self.__head = node
while cur.next != None:
cur = cur.next
cur.next = node
node.pre = cur
def travel(self):
if self.is_empty():
return False
else:
cur = self.__head
while cur != None:
print(cur.elem, end= " ")
cur = cur.next
def lenght(self):
count = 0
cur = self.__head
while cur != None:
count += 1
cur = cur.next
print("总长度:", count)
return count
def insert(self, pos, elem):
if pos < 0:
self.add(elem)
elif pos > (self.lenght() - 1):
self.append(elem)
else:
cur = self.__head
count = 1
node = SingleNode(elem)
node.next = self.__head
while count < (pos - 1):
cur = cur.next
count += 1
node.next = cur.next
cur.next.pre = node
cur.next = node
node.pre = cur
def search(self, elem):
"""查找节点是否存在"""
cur = self.__head
while cur != None:
if cur.elem == elem:
print("查找元素存在", elem)
break
else:
cur = cur.next
def remove(self, elem):
if self.is_empty():
return False
else:
pre = None
cur = self.__head
while cur != None:
if cur.elem == elem:
pre.next = cur.next
cur.next.pre = pre
break
else:
pre = cur
cur = cur.next
if __name__ == "__main__":
ll = SingleNode(100)
print(ll.elem)
ls = LinkedListTwoway()
ls.add(100)
ls.append(200)
ls.append(300)
ls.insert(2, 500)
ls.insert(3, 600)
ls.remove(600)
ls.travel()
ls.lenght()