链表python
无序链表、有序链表
有序列表排序通常是升序或降序,并且我们假设列表项具有已经定义的有意义的比较运算。
许多有序列表操作与无序列表的操作相同。
必须明确链表的第一项位置,一旦知道第一项。
链表实现的基本构造快是节点。
每个节点对象必须至少保存两个信息。
首先,节点必须包含列表项本身。我们将这个称为节点的数据字段。
此外,每个节点必须保存对下一个节点的引用。
Node 类还包括访问,修改数据和访问下一个引用的常用方法。
class Node():
def __init__(self,initialdata):
self.data = initialdata
self.next = None
def getdata(self):
return self.data
def getnext(self):
return self.next
def setdata(self,newdata):
self.data = newdata
def setnext(self,newnext):
self.next = newnext
temp = Node(93)
print(temp.getdata())
已经有了节点了,开始构造链表
无序列表将从一组节点构建,每个节点通过显式引用链接到下一个节点。
只要我们知道在哪里找到第一个节点(包含第一个项),之后的每个项可以通过连续跟随下一个链接找到。
考虑到这一点, UnorderedList 类必须保持对第一个节点的引用。
! 注意,每个链表对象将维护对链表头部的单个引用 !
#定义节点
class Node():
def __init__(self,initialdata):
self.data = initialdata
self.next = None #构造链表
class List():
//初始空链表
//链表类本身不包含任何节点对象,只是对节点头的引用
def __inti__(self):
self.head = None
#添加
#在链表头添加
def add(self,item):
newnode = Node(item)
newnode.next = self.head
self.head = newnode #新节点头
#有序链表添加
#先找合适的位置,再放进去
def orderlist_add(self,item):
current_node = self.head
previous = None
found = False
while current_node != None and not found:
if current_node >= item:
founnd = True
else:
previous = current_node
current_node = current_node.next
#要么没找到current_node=None,放到链表末尾;要么找到了found=True,插入
newnode = Node(item)
if current_node == None:
current_node = newnode
else:
previous.next = newnode
newnode.next = current_node #链表长度
def length(self):
node = self.head
count = 0
while node != None:
count += 1
node = node.next
return count
#链表搜索
def search(self,item):
current_node = self.head
while current_node != None:
if current_node.data == item;
return True
else:
current_node = current_node.next
return False
#删除
#先找再删,记录前一个节点信息
def remove(self,item):
current_node = self.head
found = False
previous = None
#先找,只要节点为None或找到了就停止循环
while current_node != None and not found:
if current_node.data == item:
found = True
else:
previous = current_node
current_node = current_node.next
#这个时候只有两种情况,要么找到了found=True;要么没找到,此时current_node=None
if current_node == None:
print("We coundn't find")
else:
previous.next = current_node.next
链表python的更多相关文章
- 从尾到头打印链表(python)
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, ...
- 单链表-Python实现-jupyter->markdown 格式测试
单链表引入 顺序表 理解Python变量的本质: 变量存储的不是值,是值的地址 理解Python的 "="表示的是指向关系 案例: 交换a,b的值, a=10, b=20 a, b ...
- 链表(python)
链表1.为什么需要链表顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活.链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理. ...
- 【数据结构】单链表介绍及leetcode206题反转单链表python实现
题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...
- 数据结构中的顺序表和链表(Python语言)
转载:https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体. ...
- 牛客网:将两个单调递增的链表合并为一个单调递增的链表-Python实现-两种方法讲解
方法一和方法二的执行效率,可以大致的计算时间复杂度加以对比,方法一优于方法二 1. 方法一: 思路: 1. 新创建一个链表节点头,假设这里就叫 head3: 2. 因为另外两个链表都为单调递增,所 ...
- 合并两个排序的链表(python)
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. # -*- coding:utf-8 -*- # class ListNode: # def _ ...
- 反转链表(python)
题目描述 输入一个链表,反转链表后,输出新链表的表头. # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self ...
- leetcode 奇偶链表 python
要求空间复杂度O(1) 那就只能用指针不断改链表的指针, 不能建立新的内存 时间复杂度O(1) 一遍遍历 不能嵌套循环 我的思想是: 1 如果链表元素数量小于等于2个,那就无法操作 2 能操作的情况下 ...
- leetcode 相交链表 python实现
这道题 要想解决其实不难, 开两层循环进行遍历就能实现,但是会超时 如果想要O(n) 的时间复杂度, 我考虑用哈希表来存储遍历过的元素,如果发现当前遍历的元素在哈希表里,那说明交叉点就在这 这里利用了 ...
随机推荐
- (四)Hystrix容错保护
Feign默认是整合了Ribbon和Hystrix这两个框架,所以代码我们在上一篇的基础上进行修改,启动Eureka,service-hello,Feign 所谓的熔断机制和日常生活中见到电路保险丝是 ...
- Nashorn——在JDK 8中融合Java与JavaScript之力--转
原文地址:http://www.infoq.com/cn/articles/nashorn 从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性 ...
- 解决Mysql报错:PHP Warning: mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.
最近我更新了appserv-win32-2.5.10的 PHP 5.2版本到PHP 5.3,在调用http://localhost/phpMyAdmin/时,出现如下错误:PHP Warning: ...
- APP信息获取接口
https://itunes.apple.com/lookup?id=APPID&callback=2 http://myapp.com/cgi-bin/mapp/mapp_info?type ...
- Java8新特性 利用流和Lambda表达式对List集合进行处理
Lambda表达式处理List 最近在做项目的过程中经常会接触到 lambda 表达式,随后发现它基本上可以替代所有 for 循环,包括增强for循环.也就是我认为,绝大部分的for循环都可以用 la ...
- 乌班图 之 apt命令 及 VMware共享文件夹
apt是Advanced Packaging Tool ,是Ubuntu下的一个安装包管理工具 大部分软件的安装.更新.卸载 都是利用apt命令来实现 直接在终端输入apt即可查阅命令的帮助信息 常用 ...
- php如何实现文件下载
php如何实现文件下载 1. 设置超链接的href属性 <ahref="文件地址"></a> 如果浏览器不能解析该文件,浏览器会自动下载.而如果文件是图片或 ...
- windows2008 虚拟机64位的操作系统安装32位的应用程序
64位的操作系统安装32位的应用程序: 安装成功但是使用有问题 报错: 最终解决: 在一台物理机的win7上面安装该软件. 然后把安装好的文件全部拷贝到win2008虚拟机上面 启动,使用 多ok了! ...
- 3ds Max 2018 在安装后无法启动或出现不稳定
问题: 安装 3ds Max 2018 后,软件无法正常启动,或在打开后不久出现不稳定和崩溃. 原因: 有多种原因可能会导致这些错误: ▪ 3ds Max.Windows 更新和 ProSound.d ...
- Centos6.6 系统优化
1:最小化安装 2:修改网卡 vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0HWADDR=52:54:00:0e:c2:c3TYPE ...