Python的单向链表实现
思路
链表由节点组成,先规定节点(Node),包含data和指向下个节点的next
初始化
data当然就是传入的data了,next指向None
添加
分两种情况:
- 链表为空,那么头节点和尾节点都指向新插入的节点
- 链表不为空,那么直接在尾部添加即可
遍历
因为只有链表的尾节点的next是指向None的,所以可以根据这点来从头遍历
删除某个节点
删除的时候分3种情况:
- 头节点,此时更改head指向的节点就好了
- 尾节点,此时只需将尾节点的前一个节点(prev)的next指向None即可
- 中间的节点,此时要将此节点的前一个节点的(prev)的next指向后续节点的(Current.next)
搜寻
遍历查找即可
清空链表
将头节点和尾节点都置为None即可
class Node:
def __init__(self,data):
self.next = None
self.data = data
class SinglyLinkedList:
def __init__(self):
self.head = None #头节点
self.tail = None #尾节点
self.size = 0 #链表长度
def append(self,data):
node = Node(data)
if self.tail: #如果链表不为空
self.tail.next = node
self.tail = node
else:
self.head = node
self.tail = node #如果这是第一个插入的节点那么头和尾都指向此节点
self.size += 1
def iter(self):
'''遍历链表'''
current = self.head
while current:
value = current.data
current = current.next
yield value
def delete(self,data):
'''根据数据删除节点'''
current = self.head
prev = self.head
while current:
if current.data == data:
if current == self.head:
self.head = current.next
elif current == self.tail:
prev.next = None
self.tail = prev
else:
prev.next = current.next
self.size -= 1
return
prev = current
current = current.next
def search(self,data):
'''搜寻某个节点'''
for node in self.iter():
if data == node:
return True
return False
def clear(self):
'''清空链表'''
self.tail = None
self.head = None
Python的单向链表实现的更多相关文章
- 用python实现单向链表
单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...
- 用Python写单向链表和双向链表
链表是一种数据结构,链表在循环遍历的时候效率不高,但是在插入和删除时优势比较大. 链表由一个个节点组成. 单向链表的节点分为两个部分:存储的对象和对下一个节点的引用.注意是指向下一个节点. 而双向链表 ...
- python数据结构——单向链表
链表 ( Linked List ) 定义:由许多相同数据类型的数据项按照特定顺序排列而成的线性表. 特点:各个数据在计算机中是随机存放且不连续. 优点:数据的增删改查都很方便,当有新的数据加入的时候 ...
- python实现单向链表
#Definition for singly-linked list. class ListNode(object): def __init__(self, x): self.val = x self ...
- Python—构造单向链表数据类型
# _*_ coding=utf-8 _*_ class Node: """ 创建链表的属性 """ def __init__(self, ...
- Python3玩转单链表——逆转单向链表pythonic版
[本文出自天外归云的博客园] 链表是由节点构成的,一个指针代表一个方向,如果一个构成链表的节点都只包含一个指针,那么这个链表就是单向链表. 单向链表中的节点不光有代表方向的指针变量,也有值变量.所以我 ...
- python数据结构链表之单向链表
单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...
- Python链表的实现与使用(单向链表与双向链表)
参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...
- Python 单向链表、双向链表
用面向对象实现Linkedlist链表 单向链表实现append.iternodes 双向链表实现append.pop.insert.remove.iternodes 单向链表与双向链表 单向链表: ...
随机推荐
- Ionic下的JPush缺少统计代码问题解决方法
用Ionic打包apk后安装到手机,收到缺少统计代码的提示,解决方法如下: 1. 找到了 platforms/android/src/com/ionichina/ioniclub/MainActiov ...
- python第二周
第二周,PYTHON图形绘制 一,计算机技术的演进发展 1946-1981.从第一台计算机的诞生到IBM的PC机的出现,我们称之为”计算机系统结构时代“.————这个时代重点在解决计算能力问题 198 ...
- Mac 启动 ssh 服务
Mac 本身有 ssh,只是没有默认开启,需要手动开启. 启动 sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 关闭 su ...
- KVM虚拟机管理——资源调整
1. 概述2. 计算资源调整2.1 调整处理器配置2.2 调整内存配置3. 存储资源调整3.1 根分区扩展3.2 添加磁盘4. 网络资源调整 1. 概述 KVM在使用过程中,会涉及到计算(CPU,内存 ...
- [转载]sql 盲注之正则表达式攻击
[转载]sql 盲注之正则表达式攻击 -----------------------------------------MYSQL 5+-------------------------------- ...
- Python中 and or 运算顺序详解 --- 短路逻辑
核心思想 表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 . 表达式从左至右运算,若 and 的左侧逻 ...
- LDAP学习笔记总结
一.LDAP概念LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根 ...
- 终于做完了这个pj
首先要说这个博客网站实在是功能太弱!不知道为什么还要每次写博客.直接交作业不好吗- -b 1.估计时间: 看见这个任务就觉得很难啊,估计装vs2012就得半天,然后上学期选修的c++基本上都忘光了,本 ...
- 爬虫时http错误提示
在爬虫,请求网站的时候,有时候出现域名报错,所出现的代码所对应的意思:
- Metrics.NET step by step使用Metrics监控应用程序的性能
使用Metrics监控应用程序的性能 在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或 ...