双链表(Doubly Linked List)是一种链表数据结构,每个节点除了包含一个指向下一个节点的指针之外,还包含一个指向上一个节点的指针。
双链表的节点类可以如下定义:
class Node:
def __init__(self, data):
self.data = data # 存储节点的数据
self.next = None # 指向下一个节点的指针
self.prev = None # 指向上一个节点的指针
双链表类(DoublyLinkedList)可以如下定义:
class DoublyLinkedList:
def __init__(self):
self.head = None # 头节点
def is_empty(self):
return self.head is None
def append(self, data):
new_node = Node(data)
if self.is_empty():
self.head = new_node
else:
current = self.head
while current.next is not None:
current = current.next
current.next = new_node
new_node.prev = current
def insert(self, data, position):
new_node = Node(data)
if position <= 0 or self.is_empty():
new_node.next = self.head
if not self.is_empty():
self.head.prev = new_node
self.head = new_node
else:
current = self.head
count = 0
while count < position - 1 and current.next is not None:
current = current.next
count += 1
new_node.next = current.next
if current.next is not None:
current.next.prev = new_node
current.next = new_node
new_node.prev = current
def delete(self, data):
if self.is_empty():
return
if self.head.data == data:
self.head = self.head.next
if self.head is not None:
self.head.prev = None
return
current = self.head
while current is not None and current.data != data:
current = current.next
if current is None:
return
if current.next is not None:
current.next.prev = current.prev
if current.prev is not None:
current.prev.next = current.next
def traverse(self):
current = self.head
while current is not None:
print(current.data)
current = current.next
这样就实现了一个双链表的数据结构。可以使用append
方法在链表末尾插入节点,使用insert
方法在指定位置插入节点,使用delete
方法删除指定数据的节点,使用traverse
方法遍历链表中的节点。