当前位置: 首页 > news >正文

Python数据结构实战:链表的构建与操作

Python数据结构实战:链表的构建与操作

一、链表(LinkedList)基础

1. 定义与特性

链表是一种动态数据结构,其特点如下:

  • 元素(节点)通过指针连接,内存空间非连续
  • 插入/删除时间复杂度为 O(1)(已知位置时)
  • 访问元素时间复杂度为 O(n)
  • 无需预先分配内存空间

2. 单链表 vs 双链表

类型结构特点
单链表节点含 datanext 指针单向遍历,内存占用更小
双链表节点含 data, prev, next双向遍历,支持反向操作

二、单链表实现

1. 节点类定义

class Node:
    def __init__(self, data):
        self.data = data  # 数据域
        self.next = None  # 指针域

2. 链表类框架

class LinkedList:
    def __init__(self):
        self.head = None  # 头节点
    
    def is_empty(self):
        return self.head is None
    
    def __len__(self):
        count = 0
        current = self.head
        while current:
            count += 1
            current = current.next
        return count
    
    def __str__(self):
        values = []
        current = self.head
        while current:
            values.append(str(current.data))
            current = current.next
        return " -> ".join(values)

3. 核心操作实现

插入操作
# 头部插入
def insert_at_head(self, data):
    new_node = Node(data)
    new_node.next = self.head
    self.head = new_node

# 尾部插入
def append(self, data):
    new_node = Node(data)
    if self.is_empty():
        self.head = new_node
        return
    current = self.head
    while current.next:
        current = current.next
    current.next = new_node

# 指定位置插入
def insert_at(self, index, data):
    if index < 0 or index > len(self):
        raise IndexError("索引超出范围")
    
    if index == 0:
        self.insert_at_head(data)
        return
    
    new_node = Node(data)
    current = self.head
    for _ in range(index-1):
        current = current.next
    new_node.next = current.next
    current.next = new_node

删除操作
# 删除头部
def delete_head(self):
    if self.is_empty():
        raise Exception("空链表")
    self.head = self.head.next

# 删除尾部
def delete_tail(self):
    if self.is_empty():
        return
    
    if self.head.next is None:
        self.head = None
        return
    
    current = self.head
    while current.next.next:
        current = current.next
    current.next = None

# 按值删除
def delete_by_value(self, value):
    if self.is_empty():
        return
    
    if self.head.data == value:
        self.delete_head()
        return
    
    current = self.head
    while current.next:
        if current.next.data == value:
            current.next = current.next.next
            return
        current = current.next

三、双链表实现(扩展)

class DNode:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None

class DoublyLinkedList:
    def __init__(self):
        self.head = None
        self.tail = None
    
    # 实现类似单链表的操作方法(需维护prev指针)
    # ...

四、每日挑战:反转单链表

1. 迭代法实现

def reverse(self):
    prev = None
    current = self.head
    while current:
        next_node = current.next
        current.next = prev
        prev = current
        current = next_node
    self.head = prev

2. 递归法实现

def reverse_recursive(self, node):
    if node is None or node.next is None:
        return node
    
    new_head = self.reverse_recursive(node.next)
    node.next.next = node
    node.next = None
    return new_head

五、性能对比

操作数组单链表双链表
随机访问O(1)O(n)O(n)
头部插入O(n)O(1)O(1)
尾部插入O(1)O(n)O(1)
中间插入O(n)O(n)O(n)
内存占用连续非连续非连续

六、应用场景

  1. 实现栈/队列
  2. 音乐播放列表
  3. 浏览器历史记录
  4. 内存管理系统
  5. 图算法中的邻接表

实战建议

  1. 使用纸笔绘制节点变化过程
  2. 添加异常处理完善代码
  3. 编写单元测试验证边界条件
  4. 尝试实现其他变种(循环链表)

相关文章:

  • Nginx安装:源代码编译安装
  • vmware虚拟机Ubuntu Desktop系统怎么和我的电脑相互复制文件、内容
  • 硬件岗位是否适合你?
  • Linux环境基础开发工具的使用(三)
  • 用算术右移操作实现整型数的除法
  • 【git】工作流实战:从本地仓库到远程仓库,git pull 与git rebase使用讲解,案例解析
  • C++,设计模式,【工厂方法模式】
  • Openssl之SM2加解密命令
  • 【个人记录】openEuler安装K3S并配置为GPU节点
  • python高效使用06_while_True和while_1哪个效率更高
  • OpenCV形态学操作
  • Windows 10事件查看器
  • PINN求解一维burgers方程
  • 【AB-01】 AUTOSAR Builder软件安装
  • C++:从拷贝构造函数到深浅拷贝
  • 如何修改Windows系统Ollama模型存储位置
  • 第三章 组件(7)- 布局与Sections
  • Java——面向对象编程
  • 使用多态来替换条件语句
  • 【嵌入式Linux应用开发基础】进程间通信(3):共享内存
  • 盐城做网站/网页搜索快捷键
  • 政府网站集约化建设技术要求/网站接广告
  • 国内做心理咨询师培训出名的网站/seo排名规则
  • 慈溪做网站哪家好/百度公司招聘岗位
  • 陕西省人民政府门户网站/百度seo新算法
  • 找个美工做淘宝网站需要多少钱/seo优化报价公司