python---双链表的常用操作
class Node(object):
"""结点"""
def __init__(self, data):
self.data = data
self.pre = None
self.next = None
class DoubleLinkList(object):
"""双链表"""
def __init__(self, node=None):
self.__head = node
def is_empty(self):
"""判断链表是否为空"""
return self.__head is None
def length(self):
"""链表的长度"""
count = 0
cur = self.__head
while cur is not None:
count += 1
cur = cur.next
return count
def travel(self):
"""遍历整个链表"""
cur = self.__head
while cur is not None:
print(cur.data, end="")
cur = cur.next
print()
def add(self, item):
"""头插"""
node = Node(item)
# 空链表头插
if self.is_empty():
self.__head = node
# 非空链表头插
else:
node.next = self.__head
self.__head.pre = node
self.__head = node
def append(self, item):
"""尾插"""
node = Node(item)
# 空链表尾插
if self.is_empty():
self.__head = node
# 非空链表尾插
else:
cur = self.__head
# 找到最后一个结点
while cur.next is not None:
cur = cur.next
cur.next = node
node.pre = cur
def insert(self, pos, item):
"""指定位置插入"""
if pos <= 0:
self.add(item)
elif pos > self.length() - 1:
self.append(item)
else:
node = Node(item)
cur = self.__head
count = 0
# 找到指定位置的前一个结点
while count < pos - 1:
cur = cur.next
count += 1
node.next = cur.next
node.pre = cur
cur.next = node
node.next.pre = node
def remove(self, item):
"""删除指定结点"""
cur = self.__head
while cur is not None:
# 找到要删除的结点
if cur.data == item:
# 如果要删除的结点是头结点
if cur == self.__head:
self.__head = cur.next
# 判断链表是否只有一个结点
if cur.next:
cur.next.pre = None
# 要删除的结点不是头结点
else:
cur.pre.next = cur.next
# 判断要删除的结点是否是尾结点
if cur.next:
cur.next.pre = cur.pre
return
else:
cur = cur.next
def search(self, item):
"""查找结点是否存在"""
cur = self.__head
while cur is not None:
if cur.data == item:
return True
else:
cur = cur.next
return False
if __name__ == '__main__':
sll = DoubleLinkList()
print(sll.is_empty())
print(sll.length())
sll.add(1)
sll.remove(1)
print(sll.is_empty())
print(sll.length())
sll.append(2)
sll.append(3)
sll.append(4)
sll.append(5)
sll.travel() # 2345
print(sll.length()) # 4
sll.add(99) # 99 2345
sll.travel()
print(sll.length()) # 5
print(sll.search(6)) # False
print(sll.search(4)) # True
sll.remove(5)
sll.travel() # 99 234
python---双链表的常用操作的更多相关文章
- 超详细!盘点Python中字符串的常用操作
在Python中字符串的表达方式有四种 一对单引号 一对双引号 一对三个单引号 一对三个双引号 a = 'abc' b= "abc" c = '''abc''' d = " ...
- Python 基礎 - 字符串常用操作
字符串常用操作 今天就介紹一下常用的字符串操作,都是以 Python3撰寫的 首字母變大寫 #!/usr/bin/env python3 # -*- coding:utf-8 -*- name = & ...
- python基础之列表常用操作及知识点小结
列表(list) List(列表) 是 Python 中使用最频繁的数据类型.列表可以完成大多数集合类的数据结构实现.它支持字符,数字,字符串甚至可以包含列表(所谓嵌套).列表用[ ]标识,是pyth ...
- python数据类型:字典dict常用操作
字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的: Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的. Value:任意数据(int,str,boo ...
- Python列表类型及常用操作
Python列表类型 1.用途: 存放多个值,可以根据索引存取值 2.定义方式: 在[ ]内用逗号分割开多个任意类型的值 l=['yven','law','lyf'] #l=list(['yven', ...
- 『无为则无心』Python序列 — 18、Python列表概念及常用操作API
目录 1.列表的概念 (1)列表的定义 (2)列表的应用场景 (3)列表的定义格式 2.列表的常用操作 (1)列表的查找 1)通过下标查找 2)通过方法查找 3)判断是否存在 (2)列表的增加 @1. ...
- python 异常处理、文件常用操作
异常处理 http://www.jb51.net/article/95033.htm 文件常用操作 http://www.jb51.net/article/92946.htm
- Python基础灬文件常用操作
文件常用操作 文件内建函数和方法 open() :打开文件 read():输入 readline():输入一行 seek():文件内移动 write():输出 close():关闭文件 写文件writ ...
- python字符串、元组常用操作
常用字符串操作函数: #Author:CGQ name="I \tam ChenGuoQiang" print(name.capitalize())#首字母大写,其他都小写 pri ...
随机推荐
- LGP5044口胡
套路题. 对于这一类与 \(\max\) 有关的题,优先考虑笛卡尔树. 建出笛卡尔树,考虑处理以某个点 \(u\) 举办会议时,参加会议的成本. 这里考虑询问区间为 \([1,n]\). 明显 \(u ...
- 浏览器输入URL,按下回车后发生什么?
大致流程 URL 解析 DNS 查询 TCP 连接 服务器处理请求 浏览器接受响应 浏览器解析渲染页面 断开连接
- Python入门随记(4)
在涉及一些实际问题,会碰到概率论等相关领域的知识,自然少不了矩阵运算,以下是Python中关于矩阵的简单操作: 1.常用库numpy import numpy as np 2.随机生成矩阵 a=np. ...
- Linux环境下安装Maven
最近在搞虚拟机,记录下虚拟机内Maven环境的搭建流程 一.选择合适的版本(由于Maven运行需要依赖于JDK,所以安装之前需要保证当前虚拟机下已经安装并配置好JDK环境,安装流程参见) https: ...
- CentOS7.5环境下Docker基本操作
1. 查找Docker中Centos镜像文件 docker search centos 2. 下载Docker中Centos镜像文件(默认下载最新版本) docker pull centos 3. ...
- Redis安装以及常见问题
安装 下载 redis官网地址:https://redis.io/ centos安装 创建软件放置目录mkdir soft 进入soft目录并下载redis安装包. cd soft wget http ...
- CentOS 7 源码安装 Zabbix 6.0
Zabbix 主要有以下几个组件组成: Zabbix Server:Zabbix 服务端,是 Zabbix 的核心组件.它负责接收监控数据并触发告警,还负责将监控数据持久化到数据库中. Zabbix ...
- Ubuntu 16.04 更改系统语言为简体中文
镜像下载.域名解析.时间同步请点击阿里巴巴开源镜像站 一.安装时报错 原因:以访客的身份进入的会报错,改为管理员进入即可. ps:有时候往往一点小细节也会造成大问题,但是我们要善于排错. 注:可以看到 ...
- 阿里云pypi软件包预警
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 背景 Python库的官方仓库pypi允许开发者自由上传软件包,这会导致某些攻击者利用这点构造恶意包进行供应链攻击,在用户安装包或者引入包时触发恶意 ...
- K8S原来如此简单(五)Metrics Server与HPA
什么是HPA https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/ 我们前面有通过kubectl ...