软件测试/测试开发丨Python 学习笔记 之 链表

点此获取更多相关资料

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接:https://ceshiren.com/t/topic/26458

链表与数组的区别

  • 复杂度分析
时间复杂度 数组 链表
插入删除 O(n) O(1)
随机访问 O(1) O(n)
  • 其他角度分析

    • 内存连续,利用CPU的机制,可以预读链表中的数据,故访问效率高
    • 而数组在内存中并不是连续存储的,所以CPU缓存不友好,没办法预读
    • 数组的大小不固定,及时动态申请,也需要拷贝数据,费时费力
    • 链表支持动态扩容
    • 链表的缺点是:存储空间大

image1125×1258 40.1 KB

单链表和循环链表

  • 区别在于头结点与尾结点是否相连
  • 循环链表从尾部可以直接到达头,适合环形数据结构,比如约瑟夫问题

双向链表优点

  1. 找到上一个结点的时间复杂度为O(1)

  2. 插入、删除操作更高效

    • 删除结点中"值等于给定值"的结点
    • 删除指定指针指向的结点

代码实现单链表

python 复制代码
# 链节点类
class ListNode:
    def __init__(self, val):
        self.val = val
        self.next = None


# 链表类
class LinkedList:
    def __init__(self):
        self.head = None

    # 根据 data 初始化一个新链表
    def create(self, data):
        self.head = ListNode(0)
        cur = self.head
        for i in range(len(data)):
            node = ListNode(data[i])
            cur.next = node
            cur = cur.next

    # 获取链表长度
    def length(self):
        count = 0
相关推荐
幻云20103 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
仰望星空@脚踏实地4 小时前
本地Python脚本是否存在命令注入风险
python·datakit·命令注入
LOnghas12115 小时前
果园环境中道路与树木结构检测的YOLO11-Faster语义分割方法
python
2501_944526426 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 蜘蛛纸牌游戏实现
android·java·python·flutter·游戏
飞Link7 小时前
【Django】Django的静态文件相关配置与操作
后端·python·django
Ulyanov7 小时前
从桌面到云端:构建Web三维战场指挥系统
开发语言·前端·python·tkinter·pyvista·gui开发
CCPC不拿奖不改名8 小时前
两种完整的 Git 分支协作流程
大数据·人工智能·git·python·elasticsearch·搜索引擎·自然语言处理
a努力。9 小时前
字节Java面试被问:TCP的BBR拥塞控制算法原理
java·开发语言·python·tcp/ip·elasticsearch·面试·职场和发展
费弗里9 小时前
一个小技巧轻松提升Dash应用debug效率
python·dash
小小测试开发9 小时前
Python浮点型常用方法全解析:从基础到实战
python