算法竞赛阶段二-数据结构(38)数据结构动态链表list

动态链表(List)的基本概念

动态链表是一种线性数据结构,通过节点间的指针连接实现动态内存分配。与数组不同,链表的大小可随需增减,插入和删除操作的时间复杂度为 O(1)(已知位置时),但随机访问需要 O(n) 时间。

常见动态链表类型

  1. 单向链表

    每个节点包含数据和指向下一个节点的指针。

    python 复制代码
    class Node:
        def __init__(self, data):
            self.data = data
            self.next = None
  2. 双向链表

    节点包含指向前驱和后继的指针,支持双向遍历。

    python 复制代码
    class Node:
        def __init__(self, data):
            self.data = data
            self.prev = None
            self.next = None
  3. 循环链表

    尾节点指向头节点,形成闭环。

动态链表的操作

插入节点

在头部插入:

python 复制代码
new_node = Node(data)
new_node.next = head
head = new_node

在中间插入(已知前驱节点 prev_node):

python 复制代码
new_node.next = prev_node.next
prev_node.next = new_node

删除节点

删除头节点:

python 复制代码
head = head.next

删除中间节点(已知前驱节点 prev_node):

python 复制代码
prev_node.next = prev_node.next.next

动态链表的优缺点

优点

  • 内存按需分配,避免静态数组的浪费。
  • 插入/删除高效,无需移动其他元素。

缺点

  • 随机访问效率低。
  • 需要额外空间存储指针。

动态链表的应用场景

  • 实现栈、队列等抽象数据类型。
  • 内存管理中的动态分配(如操作系统的空闲内存块管理)。
  • 需要频繁插入/删除的场景(如实时系统)。

示例:单向链表的完整实现

python 复制代码
class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        last = self.head
        while last.next:
            last = last.next
        last.next = new_node

    def print_list(self):
        current = self.head
        while current:
            print(current.data, end=" -> ")
            current = current.next
        print("None")

注意事项

  • 动态链表需手动管理内存(如 C/C++ 中需释放节点)。
  • 在 Python/Java 等语言中,垃圾回收机制自动处理内存释放。
相关推荐
心中有国也有家27 分钟前
hccl 架构拆解:昇腾集合通信库到底在做什么?
人工智能·经验分享·笔记·分布式·算法·架构
小O的算法实验室1 小时前
2026年MCS,Q-learning增强MOPSO与改进DWA融合算法+复杂三维地形下特定移动机器人动态路径规划
算法
Peter·Pan爱编程2 小时前
10. new_delete 不是 malloc_free 的包装
c++·人工智能·算法
不知名的老吴3 小时前
双栈秒杀表达式的生成方式
数据结构
故事和你913 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
重生之我是Java开发战士3 小时前
【动态规划】背包问题:完全背包,二位费用的背包问题,似包非包
算法·动态规划
LabVIEW开发4 小时前
LabVIEW实现FDTD 电磁仿真
算法·labview·labview知识·labview功能·labview程序
Together_CZ4 小时前
DTSemNet :Vanilla Gradient Descent for Oblique Decision Trees——用于倾斜决策树的普通梯度下降
算法·决策树·机器学习·vanilla·gradient·dtsemnet·用于倾斜决策树的普通梯度
一条大祥脚4 小时前
ABC459 贪心构造|树形DP|组合数学|贪心|单调栈|势能|前缀和
算法·深度优先
灰灰勇闯IT5 小时前
DeepEP:MoE 推理的 AllToAll 通信瓶颈怎么解
算法·cann