基于Python3的数据结构与算法 - 16 链表

目录

链表

1. 创建链表 

2. 链表的插入和删除

3. 双链表 

4. 链表总结


链表

链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域item指向下一个节点得指针next。通过节点之间的相互连接,最终串联成一个链表。

class Node:def __init__(self,item):self.item = itemself.next = Nonea = Node(1)
b = Node(2)
c = Node(3)
a.next = b
b.next = cprint(a.next.item)
print(a.next.next.item)

1. 创建链表 

创建链表共有两种方法:头插法尾插法

链表总有一个头节点和一个尾节点

使用头插法创建链表(将一个列表变为链表)

class Node:def __init__(self, item):self.item = itemself.next = Nonedef create_linklist_head(li):head = Node(li[0])  # 定义头节点for element in li[1:]:node = Node(element)node.next = head  # 将插入进来的元素与head连接起来head = node  # # 再将node定义为头节点return headdef print_linklist(lk):while lk:print(lk.item, end=',')lk = lk.nextlk = create_linklist([1, 2, 3])
# print(lk.item)   # 返回头节点
print_linklist_head(lk)

使用尾插法创建列表 :

def create_linklist_tail(li):head = Node(li[0])  # 定义头节点tail = head # 此时只有一个元素for element in li[1:]:node = Node(element)tail.next = node  # 新来的元素连接到tail后面tail = node     # 再将node定义为尾节点return headlk = create_linklist_tail([1,2,3,4,5,6])
print_linklist(lk)

2. 链表的插入和删除

 列表的插入时间复杂度为O(n), 但是链表不是,因为链表不是顺序存储。

链表的插入分为两步:

  • 先将4与2相连接
  • 再将1与4相连接
p.next = curNode.next
curNode.next = p

如果此时想再将元素4删除:

  • 先将1和2链接起来
  • 再将4删除
p = curNode.next
curNode.next = curNode.next.next
del p

3. 双链表 

 双链表的每个节点有两个指针:一个指向后一个节点,另一个指向前一个节点。

class Node(object):def __init__(self. item = None):self.item = itemself.next = Noneself.prior = None

双链表的插入:

  • 先将2与3相互连接
  • 再将1与2相互连接
p.next = curNode.next
curNode.next.prioi = p
p.prior = curNode
curNode.next = p

双链表的删除:

  • 将1与3互相连接
  • 再将2删除 
p = curNode.next
curNode.next = p.next
p.next.prior = curNode
del p

4. 链表总结

顺序表(列表/数组)与链表复杂度分析:

  • 按元素查找:都是挨个遍历,复杂度都为O(n).
  • 按下标查找:列表中直接存放地址,复杂度为O(1), 链表复杂度为O(n).
  • 在某元素后插入:列表为O(n),链表为O(1)
  • 删除某元素:列表为O(n),链表为O(1)

链表在插入和删除的操作上明显快与顺序表。

链表的内存分配更加灵活。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/557633.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloudGateway之高性能篇

SpringCloudGateway之高性能篇 背景 在公司的开放平台中,为了统一管理对外提供的接口、处理公共逻辑、实现安全防护及流量控制,确实需要一个API网关作为中间层。 场景 统一接入点: API网关作为所有对外服务的单一入口,简化客户端对内部系统…

《区块链技术:解锁数字时代的无限可能》

区块链技术作为近年来备受瞩目的创新技术,正以崭新的姿态改变着我们的世界。从技术进展到行业应用,再到面临的挑战与机遇,以及未来的发展趋势,本文将全面剖析区块链技术的发展现状和潜力。 区块链技术原理 区块链技术原理是指构成…

智慧公厕的系统构成与功能解析

智慧公厕系统是通过传感器和云平台相结合的创新技术,旨在提供更好的公厕管理与服务。智慧公厕从系统的构成来看,主要分为感知层(数据收集)、传输层(数据传输)、平台层(数据处理)和应…

Ubuntu学习笔记之Shell与APT下载工具

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 一、Ubuntu Shell操作 简单的说Shell 就是敲命令。国内把 Linux 下通过命令行输入命令叫…

4、类加载器

2.4.1 什么是类加载器 类加载器&#xff08;ClassLoader&#xff09;是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术&#xff0c;类加载器只参与加载过程中的字节码获取并加载到内存这一部分。 类加载器会通过二进制流的方式获取到字节码文件的内容&#xff0c…

【算法】数组-移除元素

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的…

CentOS、windows与Server_u服务器之间加密传输

一、适用场景&#xff1a; 1、保护数据传输&#xff1a;使用FTPS&#xff08;FTP over SSL/TLS&#xff09;可以加密FTP会话中的所有数据&#xff0c;从而防止数据在网络中被监听或篡改。 2、符合安全标准&#xff1a;许多行业标准要求数据传输必须是加密的。 3、保护用户凭证…

阿里云云服务器ECS端口多个端口号开通教程

阿里云云服务器ECS端口多个端口号开通教程 1、登录到ECS云服务器管理控制台 2、左侧栏找到【实例与镜像】>>【实例】&#xff0c;找到目标ECS实例&#xff0c;点击实例ID进入到实例详情页 3、切换到【安全组】页面&#xff0c;点击右侧【配置规则】&#xff0c;如下图&…

电力变电站自动化控制钡铼R40工业路由器4G全网通

随着电力行业的快速发展和电力系统的规模不断扩大&#xff0c;电力变电站自动化控制系统的建设和运行管理变得尤为重要。在这种背景下&#xff0c;钡铼R40工业路由器作为一款高性能、稳定可靠的通信设备&#xff0c;通过4G全网通技术&#xff0c;可以有效解决电力变电站自动化控…

WebXR实践——利用aframe框架浏览器展示全景图片

一、效果 话不多说&#xff0c;先上效果 二、代码 index.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>360&deg; Image</title><meta name"description" content"360&deg; Imag…

第十二届蓝桥杯省赛CC++ 研究生组-路径

记录到每个结点的最短距离&#xff0c;以此为基础计算后续结点最优值 #include<iostream> #include<algorithm> using namespace std; typedef long long ll;ll gcd(int a, int b){if(!b) return a;return gcd(b, a % b); }int main(){ll dp[2022] {0};//dp[i]记…

uinapp开发-PHP语言-后端安装说明-适用于圈子-陪玩-交友-校园-团购-外卖-分销等多系统-APP小程序H5多端皆有!

后端安装说明 全新安装客户&#xff0c;按此安装调试步骤&#xff0c;请按顺序&#xff1a; ** 后台安装步骤及说明 ** 1、在服务器里安装宝塔。下载www.bt.cn。 宝塔安装完毕后&#xff0c;安装环境&#xff0c;Nginx或者Apache 请选择PHP7.3 数据库mysql5.6。 NGINX 1.22.1轻…