一、引言
双向链表是一种比单向链表更复杂的数据结构,每个节点除了包含数据和指向下一个节点的指针外,还包含一个指向前一个节点的指针。这种结构使得我们可以从链表的任何节点开始,向前或向后遍历链表。
目录
一、引言
二、节点定义
三、链表实现
四、链表操作
五、应用示例
下面是一个使用双向链表类的示例:
输出结果为:
总结
二、节点定义
- 首先,我们需要定义一个双向链表的节点类(Node),它包含数据成员、指向前一个节点的指针和指向下一个节点的指针。
class Node: def __init__(self, data=None): self.data = data self.prev = None self.next = None
三、链表实现
- 接下来,我们定义一个双向链表类(DoublyLinkedList),它包含头节点、尾节点和一系列操作链表的方法。
class DoublyLinkedList: def __init__(self): self.head = None self.tail = None def append(self, value): new_node = Node(value) if not self.head: self.head = new_node self.tail = new_node else: new_node.prev = self.tail self.tail.next = new_node self.tail = new_node def prepend(self, value): new_node = Node(value) if not self.head: self.head = new_node self.tail = new_node else: new_node.next = self.head self.head.prev = new_node self.head = new_node def delete(self, value): current = self.head while current: if current.data == value: if current == self.head and current == self.tail: self.head = None self.tail = None elif current == self.head: self.head = current.next self.head.prev = None elif current == self.tail: self.tail = current.prev self.tail.next = None else: current.prev.next = current.next current.next.prev = current.prev return True current = current.next return False def print_list(self): current = self.head while current: print(current.data, end=" ") current = current.next print()
四、链表操作
- 在双向链表类中,我们实现了几个基本操作:
append
(在尾部添加新节点)、prepend
(在头部添加新节点)、delete
(删除指定值的节点)和print_list
(打印链表中的所有元素)。
五、应用示例
-
下面是一个使用双向链表类的示例:
doubly_linked_list = DoublyLinkedList()
doubly_linked_list.append(3)
doubly_linked_list.append(2)
doubly_linked_list.prepend(1)
doubly_linked_list.prepend(0) print("链表中的元素为:", end=" ")
doubly_linked_list.print_list() doubly_linked_list.delete(2) print("删除元素2后的链表为:", end=" ")
doubly_linked_list.print_list()
-
输出结果为:
链表中的元素为: 0 1 3 2
删除元素2后的链表为: 0 1 3
总结
双向链表是一种功能强大的数据结构,它允许我们在两个方向上遍历链表,提供了更多的操作灵活性。在实际应用中,双向链表常用于实现双向队列、双向栈等数据结构,以及需要高效插入、删除和遍历操作的场景。