双向链表的实现
程序员文章站
2022-05-06 21:41:47
...
概述
双向链表或者双面链表。每一个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时 指向空值。 而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。
表现形式
操作
- is_empty() 链表是否为空
- length() 链表长度
- travel() 遍历链表
- add(item) 链表头部添加
- append(item) 链表尾部添加
- insert(pos, item) 指定位置添加
- remove(item) 删除节点
- search(item) 查找节点是否存在
实现
class DLNode(object):
def __init__(self,item):
self.prev = None
self.next = None
self.item = item
class DLinkList(object):
"""双向链表"""
def __init__(self):
self._head = None
def is_empty(self):
"""链表是否为空"""
return self._head == None
def length(self):
"""链表的长度"""
count = 0
cur = self._head
while cur != None:
cur = cur.next
count += 1
return count
def travel(self):
"""遍历双向链表"""
cur = self._head
while cur != None:
print(cur.item)
cur = cur.next
def add(self,item):
"""添加头元素"""
newNode = DLNode(item)
if self.is_empty():
# 空链表
self._head = newNode
else:
newNode.next = self._head
self._head = newNode
self._head.prev = newNode
def append(self,item):
"""尾部追加元素"""
newNode = DLNode(item)
if self.is_empty():
self._head = newNode
else:
cur = self._head
while cur != None:
cur = cur.next
cur.next = newNode
newNode.prev = cur
def search(self,item):
"""搜索元素"""
if self.is_empty():
return False
cur = self._head
while cur != None:
if cur.item == item:
return True
cur = cur.next
return False
上一篇: 手写双向链表
下一篇: Spring 的事务传播行为