软件测试/测试开发丨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
相关推荐
凤头百灵鸟43 分钟前
Python语法基础篇(包含类型转换、拷贝、可变对象/不可变对象,函数,拆包,异常,模块,闭包,装饰器)
python
多多*2 小时前
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
linux·开发语言·redis·python·bootstrap·lua
何双新3 小时前
第21讲、Odoo 18 配置机制详解
linux·python·开源
Wish3D3 小时前
阿里云OSS 上传文件 Python版本
开发语言·python·阿里云
阿福不是狗5 小时前
Python使用总结之Mac安装docker并配置wechaty
python·macos·docker
gen_5 小时前
mac环境下的python、pycharm和pip安装使用
python·macos·pycharm
AI视觉网奇5 小时前
pycharm 左右箭头 最近编辑
ide·python·pycharm
思绪无限5 小时前
Pycharm的终端无法使用Anaconda命令行问题详细解决教程
ide·python·pycharm·终端·命令行·anaconda·问题教程
漫步云端-r5 小时前
Pycharm的使用技巧总结
ide·python·pycharm
风逸hhh7 小时前
python打卡day46@浙大疏锦行
开发语言·python