数据结构之链表

链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含了数据和指向下一个节点的引用。

链表中的元素在内层中不是连续存储的,这使得链表在插入和删除元素时更高效,因为不需要移动其他元素

链表的原理:

  • 节点结构:每个节点包含两个部分,数据域和指针域(数据和指向下一个节点的引用)
  • 头节点:链表的第一个节点
  • 尾节点:链表的最后一个节点,指向下一个节点的引用为None
  • 插入操作:可以在链表的任意位置插入新节点,只需要改变相邻节点的引用
  • 删除操作:可以删除链表的任意位置上的节点,只需要改变要删除的节点的相邻节点的引用
  • 从头节点开始,逐个节点查找,直到找到目标节点或达到链表结尾
python 复制代码
class LinkNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class LinkedList:
    def __init__(self):
        self.head = None
        
    def append(self, val):
        """在链表末尾增加节点"""
        new_node = LinkNode(val)#注意:new_node.next = None
        if not self.head:
            self.head = new_node
            return
        current = self.head
        while current.next:
            current = current.next
        current.next = new_node

    def prepend(self, val):
        """在链表头部添加节点"""
        new_node = LinkNode(val)
        new_node.next = self.head
        self.head = new_node

    def delete(self, val):
        """删除第一个值为val的节点"""
        if not self.head:
            return
        if self.head.val == val:
            self.head = self.head.next

        current = self.head
        while current.next and current.next.val != val:
            current = current.next
        if current.next:
            current.next = current.next.next

    # def insert_after_node(self, prev_node, val):
    #     """在指定节点后插入新节点"""
    #     if not prev_node:
            

    def find(self, val):
        """查找值为val的节点,返回第一个值为val的节点/None"""
        current = self.head
        while current and current.val != val:
            current = current.next
        if current.next:
            return current.next
        return None
    
    def display(self):
        """打印链表内容"""
        elements = []
        current = self.head
        while current:
            elements.append(current.val)
            current = current.next
        print("->".join(map(str, elements)), end='')
        print('->None')

    # def size(self):
    #     """返回链表的长度,即链表元素的个数"""
相关推荐
wabs6664 小时前
关于图论【最短路径之Bellman_ford 算法(判断负权回路)|卡码网95.城市间货物运输II的思考】
数据结构·算法·图论·bellman_ford算法·卡码网·判断负权回路
雪碧透心凉_4 小时前
Python OpenCV图像处理入门
图像处理·python·opencv
YouonlyliveonceC4 小时前
《大话数据结构》第4章实战:中缀表达式转后缀 + 后缀表达式求值(完整可运行实现)
算法
李可以量化4 小时前
Tornado 从入门到精通(二)上:协程核心机制详解
python
晴天164 小时前
AgentLoop分享(上): 让 AI 真正“自主干活“-Day15
人工智能·python
phoenix@Capricornus4 小时前
从统计决策到贝叶斯估计
人工智能·算法·机器学习
Patrick在香港4 小时前
Python爬虫框架实战:优雅抓取香港政府公开API数据的通用方案
java·开发语言·爬虫·python·ai编程·数据可视化·可用性测试
AICDragon4 小时前
1.8%就够了:K3的896个MoE专家,为什么激活率这么低反而是好事?
人工智能·算法
VALENIAN瓦伦尼安教学设备5 小时前
ASHOOTER激光对中仪如何通过颜色确定调整是否合适
数据库·嵌入式硬件·算法
货拉拉技术5 小时前
重塑 Agent 度量衡:基于 LLM-as-a-Judge 的离线评估体系与实践
算法·设计模式