无序链表、有序链表

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

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

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

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

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

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

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

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. RSA in .net and dotnet core

    dotnet RSAParameters Struct https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography ...

  2. zzuoj--1001--汽水瓶(简单数学)

    1001: 汽水瓶 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 194  Solved: 77 [Submit][Status][Web Board ...

  3. [jzoj 4722] [NOIP2016提高A组模拟8.21] 跳楼机 解题报告 (spfa+同余)

    题目链接: http://172.16.0.132/senior/#main/show/4722 题目: DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧.Srwudi的家是一幢h层的摩天 ...

  4. jquery的clone()引发的问题,下拉框点击没有反应

    此段代码是对某块元素的移位:上移.下移.对比修改前后的两段代码: 修改前: //点击移位 function move(obj,posi){ var al=$(obj).parent('li').par ...

  5. oracle-常见的执行计划(一)

    一.表访问方式 CBO基础概念中有讲到,访问表的方式有两种:全表扫描和ROWID扫描. 全表扫描的执行计划:TABLE ACCESS FULL ROWID扫描对应执行计划:TABLE ACCESS B ...

  6. Windbg调试托管代码

    Windbg调试.net托管代码需要借助于SOS.dll,.Net 4.0的32位sos.dll的路径在C:\Windows\Microsoft.NET\Framework\v4.0.30319,64 ...

  7. 三级联动(ajax同步)

    html <div id="frame"></div> js $(function(){ //拼接省市区下拉框 var str = `<select ...

  8. Android ScrollView 滚动到顶部

    有时候使用ScrollView,里边控件比较多的时候,打开界面,会滑到底部,如果要设置滑动到顶部,一般有两种方法 1.使用fullScrol(),scrollView.fullScroll(Scrol ...

  9. pandaboy玩pandas

    基于python的三方库pandas的excel表二次开发 import numpy as np import pandas as pd import time from pandas import ...

  10. Spring jar包功能

    1.spring.jar 是包含有完整发布模块的单个jar 包. 2. org.springframework.aop 包含在应用中使用Spring的AOP特性时所需的类. 3. org.spring ...