无序链表、有序链表

有序列表排序通常是升序或降序,并且我们假设列表项具有已经定义的有意义的比较运算。

许多有序列表操作与无序列表的操作相同。

必须明确链表的第一项位置,一旦知道第一项。

链表实现的基本构造快是节点。

每个节点对象必须至少保存两个信息。

首先,节点必须包含列表项本身。我们将这个称为节点的数据字段。

此外,每个节点必须保存对下一个节点的引用。

Node 类还包括访问,修改数据和访问下一个引用的常用方法。

  1. class Node():
  2. def __init__(self,initialdata):
  3. self.data = initialdata
  4. self.next = None
  5. def getdata(self):
  6. return self.data
  7. def getnext(self):
  8. return self.next
  9. def setdata(self,newdata):
  10. self.data = newdata
  11. def setnext(self,newnext):
  12. self.next = newnext
  13. temp = Node(93)
  14. print(temp.getdata())

已经有了节点了,开始构造链表
无序列表将从一组节点构建,每个节点通过显式引用链接到下一个节点。
只要我们知道在哪里找到第一个节点(包含第一个项),之后的每个项可以通过连续跟随下一个链接找到。
考虑到这一点, UnorderedList 类必须保持对第一个节点的引用。
! 注意,每个链表对象将维护对链表头部的单个引用 !

  1. #定义节点
  2. class Node():
  3. def __init__(self,initialdata):
  4. self.data = initialdata
  5. self.next = None
  6.  
  7. #构造链表
  8. class List():
  9. //初始空链表
  10. //链表类本身不包含任何节点对象,只是对节点头的引用
  11. def __inti__(self):
  12. self.head = None
  13. #添加
  14. #在链表头添加
  15. def add(self,item):
  16. newnode = Node(item)
  17. newnode.next = self.head
  18. self.head = newnode #新节点头
  19. #有序链表添加
  20. #先找合适的位置,再放进去
  21. def orderlist_add(self,item):
  22. current_node = self.head
  23. previous = None
  24. found = False
  25. while current_node != None and not found:
  26. if current_node >= item:
  27. founnd = True
  28. else:
  29. previous = current_node
  30. current_node = current_node.next
  31. #要么没找到current_node=None,放到链表末尾;要么找到了found=True,插入
  32. newnode = Node(item)
  33. if current_node == None:
  34. current_node = newnode
  35. else:
  36. previous.next = newnode
  37. newnode.next = current_node
  38.  
  39. #链表长度
  40. def length(self):
  41. node = self.head
  42. count = 0
  43. while node != None:
  44. count += 1
  45. node = node.next
  46. return count
  47. #链表搜索
  48. def search(self,item):
  49. current_node = self.head
  50. while current_node != None:
  51. if current_node.data == item;
  52. return True
  53. else:
  54. current_node = current_node.next
  55. return False
  56. #删除
  57. #先找再删,记录前一个节点信息
  58. def remove(self,item):
  59. current_node = self.head
  60. found = False
  61. previous = None
  62. #先找,只要节点为None或找到了就停止循环
  63. while current_node != None and not found:
  64. if current_node.data == item:
  65. found = True
  66. else:
  67. previous = current_node
  68. current_node = current_node.next
  69. #这个时候只有两种情况,要么找到了found=True;要么没找到,此时current_node=None
  70. if current_node == None:
  71. print("We coundn't find")
  72. else:
  73. previous.next = current_node.next

链表python的更多相关文章

  1. 从尾到头打印链表(python)

    题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, ...

  2. 单链表-Python实现-jupyter->markdown 格式测试

    单链表引入 顺序表 理解Python变量的本质: 变量存储的不是值,是值的地址 理解Python的 "="表示的是指向关系 案例: 交换a,b的值, a=10, b=20 a, b ...

  3. 链表(python)

    链表1.为什么需要链表顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活.链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理. ...

  4. 【数据结构】单链表介绍及leetcode206题反转单链表python实现

    题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...

  5. 数据结构中的顺序表和链表(Python语言)

    转载:https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体. ...

  6. 牛客网:将两个单调递增的链表合并为一个单调递增的链表-Python实现-两种方法讲解

    方法一和方法二的执行效率,可以大致的计算时间复杂度加以对比,方法一优于方法二   1. 方法一: 思路: 1. 新创建一个链表节点头,假设这里就叫 head3: 2. 因为另外两个链表都为单调递增,所 ...

  7. 合并两个排序的链表(python)

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. # -*- coding:utf-8 -*- # class ListNode: # def _ ...

  8. 反转链表(python)

    题目描述 输入一个链表,反转链表后,输出新链表的表头. # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self ...

  9. leetcode 奇偶链表 python

    要求空间复杂度O(1) 那就只能用指针不断改链表的指针, 不能建立新的内存 时间复杂度O(1) 一遍遍历 不能嵌套循环 我的思想是: 1 如果链表元素数量小于等于2个,那就无法操作 2 能操作的情况下 ...

  10. leetcode 相交链表 python实现

    这道题 要想解决其实不难, 开两层循环进行遍历就能实现,但是会超时 如果想要O(n) 的时间复杂度, 我考虑用哈希表来存储遍历过的元素,如果发现当前遍历的元素在哈希表里,那说明交叉点就在这 这里利用了 ...

随机推荐

  1. legend---十一、thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里

    legend---十一.thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里 一.总结 一句话总结:执行的条件其 ...

  2. ORACLE 11GR2 RAC的网络规划解析

    在ORACLE 11gR2中,安装RAC发生了显著变化.在10g以及11gR1的时代,安装RAC的步骤是先安装CRS,再安装DB,而到了11gR2的时代,crs与asm被集成在一起,合称为GRID,必 ...

  3. [jzoj 6084] [GDOI2019模拟2019.3.25] 礼物 [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)

    题目链接: https://jzoj.net/senior/#main/show/6084 https://www.luogu.org/problemnew/show/P4916 题目: 题解: 注: ...

  4. [jzoj 4668] [NOIP2016提高A组模拟7.19] 腐败 解题报告(质数分类+慢速乘)

    题目链接: http://172.16.0.132/senior/#main/show/4668 题目: 题解: 考虑把A数组里的每个元素分解质因数,对于每个质因数开一个vector存一下包含这个质因 ...

  5. Java Servlet 3.0 新特性

    Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...

  6. 忽略PyCharm4中特定的警告提示信息

    有一种简单的方式忽略PyCharm4中的警告,光标放在下划线上,a. 等灯泡出现,点击灯泡或者b. 按下Alt和Enter键,选择'Ignore errors like this'. 或者,在设置里更 ...

  7. JOSN快速入门

    1.JSON介绍 (1)JSON是一种与开发语言无关的,轻量级的数据格式,全称 JavaScript Object  Notation,易于阅读和编写,语言解析和生产 (2)JSON数据类型表示 数据 ...

  8. C# 分隔字符串成为字符串数组的方法(保留分隔符)

    要求如下: source string: mmmmmmynameismickeym separator: m result string []: {"m", "m&quo ...

  9. 3ds Max修改桌面快捷方式为中文语言

    通过上篇教程的学习,我们已经会切换3ds Max 2018的界面语言了,相关内容可参阅3ds Max如何设置中文界面.但是如果每次都要从开始菜单进行操作,岂不麻烦?简单一点,可以在桌面添加3ds Ma ...

  10. Django综合基础知识

    Django框架简介 MVC框架和MTV框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View) ...