在学习Python双向链表之前,你可能已经接触过单向链表。双向链表是一种更灵活的数据结构,它允许我们在链表中向前和向后遍历节点。本教程将带你一步步实现一个完整的双向链表,并解释每个部分的作用,即使是编程小白也能轻松理解。
双向链表(Doubly Linked List)是由一系列节点组成的线性数据结构。每个节点包含三部分:
与单向链表不同,双向链表可以从任意节点向前或向后移动,这使得某些操作(如删除节点)更加高效。
我们首先需要创建一个表示链表节点的类。这个类将包含数据、前驱和后继指针。
class Node: def __init__(self, data): self.data = data # 存储数据 self.prev = None # 指向前一个节点 self.next = None # 指向后一个节点 接下来,我们创建一个 DoublyLinkedList 类,用于管理整个链表。我们将实现以下基本功能:
class DoublyLinkedList: def __init__(self): self.head = None # 链表头 self.tail = None # 链表尾 def append(self, data): """在链表尾部添加新节点""" new_node = Node(data) 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, data): """在链表头部添加新节点""" new_node = Node(data) 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, data): """删除第一个匹配data值的节点""" current = self.head while current: if current.data == data: if current.prev: current.prev.next = current.next else: self.head = current.next if current.next: current.next.prev = current.prev else: self.tail = current.prev return # 删除后直接返回 current = current.next def display_forward(self): """正向打印链表""" elements = [] current = self.head while current: elements.append(current.data) current = current.next return elements def display_backward(self): """反向打印链表""" elements = [] current = self.tail while current: elements.append(current.data) current = current.prev return elements 现在,让我们用一些简单的代码来测试我们刚刚实现的双向链表:
# 创建双向链表实例dll = DoublyLinkedList()# 添加元素dll.append(1)dll.append(2)dll.prepend(0)print("正向遍历:", dll.display_forward()) # 输出: [0, 1, 2]print("反向遍历:", dll.display_backward()) # 输出: [2, 1, 0]# 删除元素dll.delete(1)print("删除1后正向遍历:", dll.display_forward()) # 输出: [0, 2] 掌握双向链表实现不仅有助于理解更复杂的数据结构(如LRU缓存、跳表等),还能提升你在算法面试中的表现。此外,在某些场景下,双向链表比数组或其他结构更节省内存或提高效率。
通过本教程,你已经学会了如何在 Python 中从零开始构建一个双向链表。我们涵盖了节点定义、链表操作(插入、删除、遍历)以及简单的测试方法。希望这份数据结构教程能帮助你打下坚实的基础。继续练习不同的链表操作,你会越来越熟练!
提示:你可以尝试扩展这个类,加入查找节点、获取长度、清空链表等功能,进一步巩固所学知识。
本文由主机测评网于2025-12-02发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025121993.html