双向链表:实现、操作与分析
创作时间:
作者:
@小白创作中心
双向链表:实现、操作与分析
引用
CSDN
1.
https://m.blog.csdn.net/delepaste/article/details/142445274
双向链表:实现、操作与分析
引言
双向链表(Doubly Linked List)是链表数据结构的一种重要形式,它允许节点从两个方向进行遍历。与单向链表相比,双向链表中的每个节点不仅包含指向下一个节点的指针(或引用),还包含指向前一个节点的指针(或引用)。这种结构使得双向链表在插入和删除节点时更加灵活和高效,特别是在需要频繁访问前驱节点的情况下。
双向链表的实现
节点定义
首先,我们需要定义双向链表的节点。每个节点包含三个部分:存储的数据、指向下一个节点的指针(或引用)以及指向前一个节点的指针(或引用)。
class ListNode:
def __init__(self, value=0, prev=None, next=None):
self.value = value
self.prev = prev
self.next = next
双向链表类
接下来,我们定义双向链表类,包含初始化链表、插入节点、删除节点、遍历链表等基本操作。
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def append(self, value):
"""在链表末尾添加节点"""
new_node = ListNode(value)
if not self.head:
self.head = self.tail = new_node
else:
self.tail.next = new_node
new_node.prev = self.tail
self.tail = new_node
def prepend(self, value):
"""在链表开头添加节点"""
new_node = ListNode(value)
if not self.head:
self.head = self.tail = new_node
else:
self.head.prev = new_node
new_node.next = self.head
self.head = new_node
def delete_node(self, node):
"""删除指定节点"""
if not node:
return
if node.prev:
node.prev.next = node.next
else:
self.head = node.next
if node.next:
node.next.prev = node.prev
else:
self.tail = node.prev
def print_list(self):
"""遍历链表并打印每个节点的值"""
current = self.head
while current:
print(current.value, end=" ")
current = current.next
print()
双向链表的操作
插入操作
- append(value): 在链表末尾添加新节点。
- prepend(value): 在链表开头添加新节点。
删除操作
- delete_node(node): 删除指定的节点。需要传入要删除的节点对象。
遍历操作
- print_list(): 遍历链表并打印每个节点的值。
双向链表的分析
优点
- 灵活性:双向链表允许从两个方向遍历,使得插入和删除操作更加灵活。
- 高效性:在已知前驱节点或后继节点的情况下,插入和删除操作的时间复杂度为O(1)。
缺点
- 空间复杂度:每个节点需要额外的空间来存储前驱节点的指针,增加了空间开销。
- 指针管理:在插入和删除节点时,需要维护更多的指针关系,增加了实现的复杂性。
结论
双向链表是一种强大的数据结构,适用于需要频繁进行节点插入和删除操作,并且需要快速访问前驱和后继节点的场景。通过合理的实现和操作,我们可以充分利用双向链表的优点,同时避免其缺点带来的问题。希望本文能帮助你更好地理解和使用双向链表。
热门推荐
泸州长江边再也见不到搬罾的人,流传千年的捕鱼法,为何消失?
什么是诉讼答辩权
陕西557分能上什么大学?附2025年可以报考的大学名单
舌尖发麻吃什么调养?专业医生给出饮食建议
为什么量子力学中可观测的物理量一定是实数?
执掌曼联近1年,足球总监离任、换了主教练,是试错还是果断决策
猫咪乱尿怎么办?7个实用解决方案帮你轻松应对
王者荣耀李白最强出装铭文搭配攻略
申请保全限制是什么
心理学上有一种效应叫:哭泣效应(偶尔哭一哭,身体更健康)
中山地铁,谋划直通3大万亿都市!(附地铁路线图)
如何发布有效的租房消息?怎样提高租房消息的关注度?
美联储官员:当前货币政策具限制性,降息需等待更多通胀进展
壮医学中的刮痧疗法
海螵蛸的功效与服用指南
麻黄汤买前必读:安全使用与效果解析指南
四肢酸痛是怎么回事?专家解析常见原因及应对方法
护理专业大专的就业前景如何?薪资待遇好吗?
家居空间规划指南:如何打造既实用又个性化的居住空间?
油性肌肤补水保湿技巧 支招七个方法
物理考试中容易丢分的地方及对策
曼联换帅风波:阿莫林接任,范尼成牺牲品?
关注孩子的口腔健康,纠正不良习惯
虚拟机坏了怎么办?五种实用的恢复方法
脚趾头砸伤肿了发黑的原因是什么
移动出行的2024年:Robotaxi狂奔IPO,网约车陷入饱和困境
鬼谷八荒金光五彩怎么选择?攻略详解
控制论的历史演变及其在中国的应用
成功者的十项自我管理!看看你成功了几项?
趋势2025 | 全球低轨星座加速组网,太空资源争夺白热化