python数据结构链表之单向链表(实例讲解)

单向链表

单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。

表元素域elem用来存放具体的数据。

链接域next用来存放下一个节点的位置(python中的标识)

变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。

节点实现

class Node(object):

"""单链表的结点"""

def __init__(self,item):

# item存放数据元素

self.item = item

# next是下一个节点的标识

self.next = None

单链表的操作

is_empty() 链表是否为空

length() 链表长度

travel() 遍历整个链表

add(item) 链表头部添加元素

append(item) 链表尾部添加元素

insert(pos, item) 指定位置添加元素

remove(item) 删除节点

search(item) 查找节点是否存在

单链表的实现

class Singlepnkpst(object):

"""单链表"""

def __init__(self):

self.__head = None

def is_empty(self):

"""判断链表是否为空"""

return self.__head == None

def length(self):

"""链表长度"""

# cur初始时指向头节点

cur = self.__head

count = 0

# 尾节点指向None,当未到达尾部时

while cur != None:

count += 1

# 将cur后移一个节点

cur = cur.next

return count

def travel(self):

"""遍历链表"""

cur = self.__head

while cur != None:

print(cur.item,end = ' ')

cur = cur.next

print("")

头部添加元素

def add(self, item):

"""头部添加元素"""

# 先创建一个保存item值的节点

node = Node(item)

# 将新节点的链接域next指向头节点,即_head指向的位置

node.next = self.__head

# 将链表的头_head指向新节点

self.__head = nod

尾部添加元素

def append(self, item):

"""尾部添加元素"""

node = Node(item)

# 先判断链表是否为空,若是空链表,则将_head指向新节点

if self.is_empty():

self.__head = node

# 若不为空,则找到尾部,将尾节点的next指向新节点

else:

cur = self.__head

while cur.next != None:

cur = cur.next

cur.next = node

指定位置添加元素

def insert(self, pos, item):

"""指定位置添加元素"""

# 若指定位置pos为第一个元素之前,则执行头部插入

if pos <= 0:

self.add(item)

# 若指定位置超过链表尾部,则执行尾部插入

epf pos > (self.length()-1):

self.append(item)

# 找到指定位置

else:

node = Node(item)

count = 0

# pre用来指向指定位置pos的前一个位置pos-1,初始从头节点开始移动到指定位置

pre = self.__head

while count < (pos-1):

count += 1

pre = pre.next

# 先将新节点node的next指向插入位置的节点

node.next = pre.next

# 将插入位置的前一个节点的next指向新节点

pre.next = node

删除节点

def remove(self,item):

"""删除节点"""

cur = self.__head

pre = None

while cur != None:

# 找到了指定元素

if cur.item == item:

# 如果第一个就是删除的节点

if not pre:

# 将头指针指向头节点的后一个节点

self.__head = cur.next

else:

# 将删除位置前一个节点的next指向删除位置的后一个节点

pre.next = cur.next

break

else:

# 继续按链表后移节点

pre = cur

cur = cur.next

查找节点是否存在

def search(self,item):

"""链表查找节点是否存在,并返回True或者False"""

cur = self.__head

while cur != None:

if cur.item == item:

return True

cur = cur.next

return False

以上这篇python数据结构链表之单向链表(实例讲解)就是小编分享给大家的全部内容了

完 谢谢观看

python创建链表实例_python数据结构链表之单向链表(实例讲解)相关推荐

  1. python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...

    本文实例讲述了Python数据结构与算法之链表定义与用法.分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表类插入和 ...

  2. python二叉树遍历例子_python数据结构之二叉树的遍历实例

    遍历方案   从二叉树的递归定义可知,一棵非空的二叉树由根结点及左.右子树这三个基本部分组成.因此,在任一给定结点上,可以按某种次序执行三个操作: 1).访问结点本身(N) 2).遍历该结点的左子树( ...

  3. 数据结构与算法-单向链表的修改和删除操作

    单向链表的修改和删除操作 单向链表的修改 单向链表的删除 单向链表的修改 在上面的代码基础上定义几个英雄 HeroNode hero1 = new HeroNode(1,"宋江", ...

  4. neo4j 查询同一节点的两个上级_链表的魅力:两个单向链表的第一个交点

    最近听了左神的算法课,对一些常用数据结构以及算法改进的思路有了更深的理解,特此总结,不定期更新算法题目以及答案总结!笔者使用C++进行算法重现!虽然左神使用的是JAVA,但他自己也说了,算法与语言无关 ...

  5. python列表是顺序表还是链表_Python数据结构与算法(链表使用详解)

    链表 单向链表 p是头节点,指向第一个值,最后一个是伪节点,因为不指向地址. 表元素域elem用来存放具体的数据 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点 ...

  6. python数据结构 树_python数据结构之二叉树的建立实例

    先建立二叉树节点,有一个data数据域,left,right 两个指针域 复制代码 代码如下: # -*- coding: utf - 8 - *- class TreeNode(object): d ...

  7. python创建一个列表_Python创建一个元素都为0的列表实例

    Python创建一个元素都为0的列表实例 实现创建一个元素都为0的列表: l=10 lis=[0]*l lis 输出结果: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 以上这篇Pyt ...

  8. java链表实现_数据结构——基于java的链表实现(真正理解链表这种数据结构)...

    一.链表介绍 1.什么是链表? 链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.如下图所示,在数据结构中,a1里面的指针存储着a2的地址,这样一个 ...

  9. java 链表算法_JAVA数据结构与算法之链表(一)

    单项链表 链表介绍: 链表是有序的列表,但是它在内存中是存储如下 1)链表是以节点的方式来存储, 是链式存储 2) 每个节点包含 data 域, next 域:指向下一个节点. 3) 如图:发现 链表 ...

最新文章

  1. 德勤:2025年汽车行业价值链的四个合理情境
  2. book mac pro怎么重装系统_MAC笔记本电脑解决NTFS硬盘无法写入的简要方法
  3. 如果我要....(生活版)
  4. Windows Phone 8 获取与监听网络连接状态
  5. 确认无疑,.NET 6是迄今为止最快的.NET
  6. [渝粤教育] 西南科技大学 会计学原理 在线考试复习资料(2)
  7. C语言打印金字塔,菱形,V形图案
  8. MAC - 必备软件安装与使用
  9. imdisk虚拟光驱安装linux,imdisk使用教程_Imdisk工具使用方法介绍_imdisk_imdisk虚拟光驱...
  10. 速学Sql Server从基础到进阶
  11. 新的开始 LibreOJ - 10066(最小生成树模板)
  12. XCOM串口调试软件的安装与使用(附串口及驱动资源包)
  13. 防止电脑锁屏html 代码 适合IE下运行
  14. android10rom包,安卓10的刷机教程,教你刷好Killer的精简包
  15. 解决Windows开机后无启动项的问题
  16. 东秦OJ_1841: 超级密码
  17. html怎么把字做成动画效果,8个华丽的HTML5文字动画特效赏析
  18. 存储系统——主存储器
  19. 重读《一段关于国产芯片和操作系统的往事》
  20. 用聚合数据API(苏州实时公交API)快速写出小程序

热门文章

  1. ARMLINUX学习笔记(5)-----ADS建立工程
  2. 解决idea创建ssm项目找不到mybatis的mapper的xml文件问题
  3. Oracle学习 第26天 Toad试用感受
  4. SVN错误:Attempted to lock an already-locked dir及不能提交.so文件
  5. CSS3 Transform变形理解与应用
  6. linux 删除和安装java
  7. 面向对象三之对象的使用方法
  8. javascript学习随笔(编写浏览器脚本 Navigator Scripting )
  9. 介绍struct bus_type非常好的
  10. 软考信息系统项目管理师_考试题型介绍_选择题75分_45分过_案例分析题_75分_45分过_计算题_论文题的架构和写法---软考高级之信息系统项目管理师002