【参考】

【https://blog.csdn.net/weixin_37728031/article/details/81145258】【注意链表结构,节点包括数值和next、链表中的head】

【https://www.cnblogs.com/yudanqu/p/9172459.html】【链表的类的实现】【* 画一下图有助于理解节点和链表】

【https://www.cnblogs.com/linxiyue/p/3551633.html】【Node和单链表】

【https://blog.csdn.net/su_bao/article/details/81065746】【一些链表的操作】

【https://www.cnblogs.com/yudanqu/p/9172459.html】【链表的构建+链表的实例化(main)】

【实践】

# -*- coding:UTF-8 -*-class Node():def __init__(self, item):self._item=itemself._next=Nonedef getItem(self):return self._itemdef getNext(self):return self._nextdef setItem(self, newitem):self._item=newitemdef setNext(self, newnext):self._next=newnextclass SingleLinkedList():def __init__(self):self._head=Noneself._size=0# 检测链表是否是空的def isEmpty(self):return self._head==Nonedef size(self):current=self._headcount=0while current!=None: # 这处的判断不可以是current.getNext()!=None 因为最后一个节点虽然指向为None,但他的val值存在,该节点需要计入size长度count+=1current=current.getNext()return countdef travel(self):current=self._headwhile current!=None: # 这处的判断不可以是current.getNext()!=None 因为最后一个节点虽然指向为None,但他的val值是需要打印的print current.getItem(), '=>'
#                print current.getNext(), '=>' # 打印出来的是内存地址current=current.getNext()# add方法,在链表前段添加节点元素def add(self, item):temp=Node(item)temp.setNext(self._head) # self下的是链表当前头节点,temp是要新加的节点;self._head目前指向的是当前节点,并把指向赋给temp的next指针,则temp的next指针指向当前节点;self._head=temp # 把当前链表的head指针指向新的节点,即temp这个点# append方法,在链表尾部添加节点元素def append(self, item):temp=Node(item)if self.isEmpty():self._head=temp # 若链表是空的,则将头节点指向要添加的元素else:current=self._head # 此刻current是一个具体节点,self指的是链表while current.getNext()!=None:current=current.getNext()current.setNext(temp)# search方法,用来检测某节点元素是否在链表中def search(self, item):current=self._headfounditem = Falsewhile current!=None and not founditem:if current.getItem()==item:founditem=Trueelse:current=current.getNext()return founditem# index方法,用来索引节点元素在链表中的位置def index(self,item):current=self._headcount=0found=Falsewhile current!=None and not found:count+=1    # count+=1 和 count++ 一致性if current.getItem()==item:found=Trueelse:current=current.getNext()if found:return countelse:raise ValueError, '%d is not in linkedlist' %item # raise方法的用处,print里 % 与 {} 的占位作用区别是?{}好像是带格式输出# remove方法,删除链表中的某个元素节点def remove(self,item):current=self._headpre=Nonewhile current!=None:if current.getItem()==item:if not pre: # if pre 代表在问pre是不是真的;if not pre 在问pre是不是假的;self._head=current.getNext()else:pre.setNext(current.getNext())break # break语句用在while和for循环中,此处打破了所在的while循环else:pre=currentcurrent=current.getNext()# insert方法,在链表中指定位置插入节点元素def insert(self,pos,item):if pos<=1:self.add(item)elif pos>self.size():self.append(item)else:temp = Node(item)current = self._headcount = 1pre = Nonewhile count < pos:pre = currentcurrent = current.getNext()count += 1pre.setNext(temp)temp.setNext(current)if __name__=="__main__":l1=SingleLinkedList()print (l1.isEmpty())print '======0======='l1.append(3)l1.add(999)print (l1.isEmpty())print 'size is :', l1.size()l1.travel()print '======1======='l1.insert(-3,110)print 'size is :', l1.size()l1.travel()print '======2======='l1.insert(99, 111) #虽然要求insert位置是99,但实际上插在最后一个节点,即第4个print 'size is :', l1.size()l1.travel()print '======3======='l1.insert(90, 10) # 虽然要求insert位置是90,但实际上当前90位不存在,所以插在当前最后一个节点,即第5个print 'size is :', l1.size()print 'Value %d index is :'% 999, l1.index(999)l1.travel()print '======4======='l1.remove(111)print 'size is :', l1.size()l1.travel()

【补充】

转载于:https://www.cnblogs.com/anno-ymy/p/11125969.html

【python】关于python的链表结构实现相关推荐

  1. python链表和树实验报告_关于Python实现树结构和链表结构的一点想法

    关于Python实现树结构和链表结构的一点想法 Python由于内置的数据结构具有很高的灵活性,所以可以用很多种方式来构建树.图.链表等结构 1. 树的Python实现 python自然可以使用cla ...

  2. python的类程序的结构_Python程序员学习路径之数据结构篇

    原标题:Python程序员学习路径之数据结构篇 点击标题下「异步图书」可快速关注 在计算机科学中,数据结构是一门进阶性课程,概念抽象,难度较大.Python语言的语法简单,交互性强.用Python来讲 ...

  3. Python工程的文档结构

    Python工程的文档结构,可以参考https://stackoverflow.com/questions/193161/what-is-the-best-project-structure-for- ...

  4. 【Python】Pandas基础:结构化数据处理

    python:Pandas基础:结构化数据处理 目录: 文章目录 @[toc] 一 pandas及其重要性 二 pandas的数据结构介绍 1 Series 2 DataFrame 3 索引对象 三 ...

  5. 以下python语言关键字在异常处理_【单选题】以下 Python 语言关键字在异常处理结构中用来捕获特定类型异常的选项是: ( )...

    问题:[单选题]以下 Python 语言关键字在异常处理结构中用来捕获特定类型异常的选项是: ( ) 更多相关问题 进程从运行状态变为等待的原因可能是() 进程调度主要负责() 在下列叙述中,错误的一 ...

  6. Python数据结构学习笔记——链表:无序链表和有序链表

    目录 一.链表 二.无序链表 实现步骤分析 三.无序链表的Python实现代码 四.有序链表 实现步骤分析 五.有序链表的Python实现代码 结语 一.链表 链表中每一个元素都由为两部分构成:一是该 ...

  7. python的两种循环结构_python分支和循环结构

    Python Python开发 Python语言 python分支和循环结构 1.分支结构 1.1应用场景 迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构. ...

  8. python list转换成树形结构_python递归查询菜单并转换成json实例

    最近需要用python写一个菜单,折腾了两三天才搞定,现在记录在此,需要的朋友可以借鉴一下. 备注:文章引用非可执行完整代码,仅仅摘录了关键部分的代码 环境 数据库:mysql python:3.6 ...

  9. python123循环结构_来学Python啦,大话循环结构~

    点击上方蓝字关注"程序员Bob" 每日一句,送给最珍贵的你: 为学日益,为道日损,损之又损,以至于无为,无为而无不为. 最近想研究爬虫了,准备拾起以前Python,继续学! 上次P ...

最新文章

  1. php父类的静态变量,抽象父类中的PHP静态变量:问题是在示例代码中!
  2. 设计模式之策略模式(Strategy)摘录
  3. nagios配置安装
  4. 第十篇 Form表单
  5. 使程序变为后台运行代码
  6. Linux系统命令常用查询
  7. 解决使用pip安装lxml包报错问题Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
  8. jQueryMobile常用技巧
  9. 文献记录(part22)--Learning local metrics from pairwise similarity data
  10. 操作系统课设之虚拟内存页面置换算法的模拟与实现
  11. linux ulimit
  12. 虚拟路由器冗余协议VRRP原理详解!
  13. 【必修一】部分数学名词与数学符号
  14. Git(15)- Git 分支 - 分支开发工作流
  15. logrotate日志管理工具
  16. python连接informix数据库
  17. Tesla_T4加速卡详细参数
  18. 【爬虫】应用Python爬虫爬取豆瓣租房上的帖子信息
  19. 计算机附近组件的安装方法,在计算机上安装组件
  20. wifi网络信息查看

热门文章

  1. GIS-001-gdal软件下载地址
  2. 【贪心】【codeforces】651A Joysticks
  3. Android屏幕适配的一些常识
  4. 《Ext JS 高级程序设计》的目录与样张
  5. DDBuildToolsRelease1.0
  6. SQL 2000 异数据库数据同步
  7. Google 超分辨率技术 RAISR:模糊图片瞬间变清晰,运算速度快十倍
  8. 从ADAS到无人驾驶 关键技术有哪些
  9. Shell命令-文件及目录操作之mkdir、mv
  10. Python中re(正则表达式)模块函数学习