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

python实现链表

什么是链表

链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域item和指向下一个节点的指针next。通过节点之间的相互连接最终串联成一个链表。

python实现一个简单链表

我们可以用python实现一个超级简单的链表

class node:# 初始化数据def __init__(self, item):self.item = itemself.next = None
# 一个一个构造链表元素
a = node(1)
b = node(2)
c = node(3)a.next = b
b.next = c# 打印我们的节点
print(a.next.next.item)

如上,我们是一个一个的去创建,那么,我们如何通过python去实现整体的链表创建呢?

python实现链表创建

这里有两种方法可以实现,一种是头插法,一种是尾插法;
在这里插入图片描述
这里我们先使用python实现头插法


class Node:# 初始化数据def __init__(self, item):self.item = itemself.next = None
# 一个一个构造链表元素
# a = node(1)
# b = node(2)
# c = node(3)
#
# a.next = b
# b.next = c# 打印我们的节点
# print(a.next.next.item)def create_linklist_head(li):# 头部指向第一个元素head = Node(li[0])# 接下来,循环创建这个元素for element in li[1:]:# 创建节点node = Node(element)# 节点的下一个是头部位置node.next = head# 头部位置就是加进来的节点的位置head = nodereturn headdef print_linklist(lk):while lk:print(lk.item, end=',')lk = lk.nextlk = create_linklist_head([1, 2, 3, 4, 5])
print_linklist(lk)

我们创建了实例,运行结果是:
在这里插入图片描述
接下俩我们实现尾插法:

def create_linklist_head(li):# 头部指向第一个元素head = Node(li[0])# 接下来,循环创建这个元素for element in li[1:]:# 创建节点node = Node(element)# 节点的下一个是头部位置node.next = head# 头部位置就是加进来的节点的位置head = nodereturn headdef create_linklist_tail(li):head = Node(li[0])tail = headfor element in li[1:]:node = Node(element)tail.next = nodetail = nodereturn headdef print_linklist(lk):while lk:print(lk.item, end=',')lk = lk.next# lk = create_linklist_head([1, 2, 3, 4, 5])
# print_linklist(lk)
lk = create_linklist_tail([1, 2, 3, 4, 5])
print_linklist(lk)

运行之后,我们发现,我们用尾插法实现了一个链表的输出
在这里插入图片描述

http://www.lryc.cn/news/430451.html

相关文章:

  • Linux Shell 编程基础入门(一)
  • 大白话讲微服务的灾难性雪崩效应
  • 配置 K3s 访问私有镜像仓库
  • 数学建模之数据分析【七】:对Pandas DataFrame 进行切片
  • 删除 Docker 容器的日志文件
  • DevOps入门(上)
  • 基于Python的网易民谣歌词数据分析的设计与实现
  • 趋动科技联合云轴科技推出GPU云原生超融合解决方案
  • Dooring智图,一款开箱即用的图片海报编辑器
  • 苹果macbook电脑怎么玩《黑神话:悟空》游戏教程来了
  • git 目录提交代码
  • 多商户商品下单限购问题修复
  • eNSP 华为ACL配置
  • 实现高效研发运营一体化:深度落地DevOps解决方案的探索与实践
  • Milvus向量数据库-磁盘索引简介
  • Web漏洞介绍和Sql注入漏洞
  • 【Eureka】Eureka 介绍与实战
  • 密码管理系统的自动化与集成:重塑安全与效率的双重飞跃
  • Outlook如何精确搜索邮件?
  • MambaCSR: 使用SSM的双交错扫描压缩图像超分辨率
  • 【C++】深入解析C/C++内存管理:new与delete的使用及原理
  • 递归--数据结构--黑马
  • 【3.1】贪心算法-解分发饼干
  • 解决 Error running ‘Application‘: Command line is too long.
  • 衡量与归因将是Netflix程序化广告业务的首要任务
  • 关于如何在已有qt项目中添加该项目的单元测试工程
  • 深度剖析数字媒体产业链的无限潜力与创新生态
  • 集团数字化转型方案(十二)
  • Andrid异步更新UI:Handler(二)深入了解:Message你真的会创建?它是如何子线程和主线程通知?
  • 2025计算机毕设50条小众好做的Java题目【计算机毕设选题推荐】