无序链表、有序链表

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

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

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

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

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

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

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

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的更多相关文章

  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. Array数组的排序与二分查字法

    import java.util.Arrays; public class sort { public static void main(String[] args) { // TODO 自动生成的方 ...

  2. lucene简单使用demo

    测试结构目录: 1.索引库.分词器 Configuration.java package com.test.www.web.lucene; import java.io.File; import or ...

  3. C# 程序集Assembly

    原谅我到目前为止一直肤浅的认为程序集就是dll,这种想法是错误的. 今天就系统的学习记录一下“程序集”的概念.原文链接https://www.cnblogs.com/czx1/p/2014131370 ...

  4. html5+css3+javascript 自定义提示窗口

    效果图: 源码: 1.demo.jsp <%@ page contentType="text/html;charset=UTF-8" language="java& ...

  5. row_number函数的使用

    转 row_number函数的使用 SQL Server数据库ROW_NUMBER()函数的使用是本文我们要介绍的内容,接下来我们就通过几个实例来一一介绍ROW_NUMBER()函数的使用. 实例如下 ...

  6. php获取当前月份的前(后)几个月

    //获取当前月份的前一月 function GetMonth($sign) { //得到系统的年月 $tmp_date=date("Ym"); //切割出年份 $tmp_year= ...

  7. c指针学习小结(参考别人总结的经验)

    指针学习与总结一.1.int *p :p与*先结合,说明p是一个指针,然后与int结合说明指向的是一个int型的.2.int p[3] :p与[]结合说明p是一个数组,然后与int结合,说明数组里的元 ...

  8. HTTP——学习笔记(1)

    名词解释: 协议: HTTP:HyperText Transfer Protocol,超文本传输协议,属于应用层的协议 FTP:File Transfer Protocol,文件传输协议,相比于HTT ...

  9. 工作笔记5.JAVA图片验证码

    本文主要内容为:利用JAVA图片制作验证码. 设计思路: 1.拷贝AuthImageServlet.class图片验证码 2.配置web.xml 3.JSP中,调用封装好的AuthImageServl ...

  10. mysql-基础和基本指令

    基础: 1.数据库模式:简单的说:就是一个数据库用户所拥有的数据库的对象.   比如scott用户建立了表,索引,视图,存储过程等对象,那么这些对象就构成了schema   scott .有时用作数据 ...