数据结构-链表

「链表 Linked List」是一种线性数据结构,其中每个节点都是单独的对象,各个节点之间通过指针连接。

每个节点包括两部分:一是结点「值 Value」,二是指向下一结点的「指针 Pointer」

# 节点
class Node:
    def __init__(self, item):
        self.item = item
        self.next = None

创建链表:

  • 头插法
  • 尾插法

头插法

def create_linklist(li):  # li为列表
    head = Node(li[0])
    for element in li[1:]:
        node = Node(element)  # 创建节点
        node.next = head  # 第一步,node的指针先跟头节点连接起来
        head = node  # 第二步,head指向新的节点
    return head

尾插法

def creat_linklist_tail(li):  # li为列表
    head = Node(li[0])
    tail = head
    for element in li[1:]:
        node = Node(element)  # 创建节点
        tail.next = node  # 尾节点指针指向新的节点
        tail = node  # tail指向新的节点
    return head  # 不能返回tail,tail已经是最后一个节点了

链表的操作

  • 插入节点
  • 删除节点
  • 访问节点
  • 遍历节点
  • 打印链表

插入节点

# 链表插入节点
def insert(n0,p):  # 在链表节点n0后面插入节点p
    n1 = n0.next  # n1为n0的下一个节点
    p.next = n1   # 插入节点p的指针指向n1
    n0.next = p   # n0的下一个节点指向p

删除节点

# 链表删除节点
def remove_linklist(n0):  # 删除n0后面的首个节点
    p = n0.next  # p为n0的下一个节点
    n1 = p.next  # n1为p的下一个节点
    n0.next = n1

访问节点

# 访问链表中 索引为index 的节点
def access(head, index):  # head为头节点
    for _ in range(index):  # 一直遍历到index-1
        if not head:
            return None
        head = head.next  # index-1的下个节点index
    return head.item  # 返回index值

遍历节点

复制代码
# 遍历链表查找 
def find_linklist(head, target): # 在链表中查找 值为 target 的首个节点
    index = 0
    while head:
        if head.item == target:
            return index
        head = head.next
        index += 1
    return None
复制代码

打印链表

def print_linklist(lk):
    while lk:
        print(lk.item, end=',')
        lk = lk.next

 

posted @   天才九少  阅读(35)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示