链表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) 的时间复杂度, 我考虑用哈希表来存储遍历过的元素,如果发现当前遍历的元素在哈希表里,那说明交叉点就在这 这里利用了 ...
随机推荐
- 优动漫 PAINT 导航窗口面板
导航窗口面板用于管理画布的视图.本节将介绍如何在其中缩放.旋转.翻转画布. 如何使用导航窗口面板 使用[导航窗口]面板便于把握整个画布,以下将为您详细介绍. 什么是[导航窗口]面板 [导航窗口]面板用 ...
- PuTTY登录交换机后Backspace键不能删除
使用PuTTY登录后,发现如果键入字符有误,不能使用键盘上Backspace键删除.查看PuTTY终端(Terminal)键盘(Keyboard)设置,修改上述两项设置如下(红框所示):即“The B ...
- NOIp2018模拟赛三十五
两道大数据结构把我砸懵 成绩:未提交 Orz xfz两道正解 A:[BZOJ4049][CREC2014B]mountainous landscape B:CJB的大作(CF改编题)
- PHP中使用DOM读取解析XML属性值一例
先看XML文件结构,与常见的文件略有不同,数据并不是用闭合标签保存的,而是直接保存在属性值中. <?xml version="1.0" encoding="utf- ...
- php>$_SERVER服务的一些常用命令
$_SERVER['REMOTE_ADDR'] //当前用户 IP . $_SERVER['REMOTE_HOST'] //当前用户主机名 $_SERVER['REQUEST_URI'] //UR ...
- js去掉字符串得第一个字符 、去掉字符串的最后一个字符
a1 = aa[0].slice(1); //去掉第一个字符串 a2 = a2.substr(0, a2.length - 1);
- ajaxFileUpload 返回的数据报错
$.ajaxFileUpload({ url : '/updateMallGoods', data : { "goodsName":goodsName, "proDesc ...
- redhat7.5 升级OpenSSH_7.8p1
1:拷贝编译好rpm安装包 [root@liwm ~]# scp -r root@192.168.31.130:/home/openssh7.8 /home/ root@192.168.31.130' ...
- 总结使人进步,可视化界面GUI应用开发总结:Android、iOS、Web、Swing、Windows开发等
可视化界面的软件,是21世纪最主流的应用类型了,黑屏控制台的不适合普通用户. 2004年左右的时候,作为普通网民,接触的自然是可视化,准确是Windows那一套. 那个时候,Microsoft ...
- STM32为什么必须先配置时钟
首先,任何外设都需要时钟,51单片机,stm32,430等等,因为寄存器是由D触发器组成的,往触发器里面写东西,前提条件是有时钟输入. 51单片机不需要配置时钟,是因为一个时钟开了之后所有的功能都可以 ...