class Node(object):

"""结点"""

def __init__(self, data):

self.data = data

self.next = None

class SingleLinkList(object):

"""单链表"""

def __init__(self, node=None):

# 头结点设置为私有变量

self.__head = node

def is_empty(self):

"""链表是否为空"""

return self.__head is None

def length(self):

"""链表长度"""

cur = self.__head

count = 0

while cur is not None:

cur = cur.next

count += 1

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)

node.next = self.__head

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

def insert(self, pos, item):

"""指定位置添加结点"""

# 指定位置pos在第一个元素之前,执行头插法

if pos <= 0:

self.add(item)

# 指定位置超过链表尾部, 执行尾插法

elif pos > self.length() - 1:

self.append(item)

else:

# 指定位置的前一个结点

pre = self.__head

node = Node(item)

count = 0

while count < (pos - 1):

pre = pre.next

count += 1

node.next = pre.next

pre.next = node

def remove(self, item):

"""删除结点"""

cur = self.__head

pre = None

while cur is not None:

# 找到了要删除的结点

if cur.data == item:

# 要删除的结点是头结点

if cur == self.__head:

# 将头节点指向头结点的后一个结点

self.__head = cur.next

# 要删除的结点不是头结点

else:

pre.next = cur.next

return

else:

pre = cur

cur = cur.next

def search(self, item):

"""查找结点是否存在"""

cur = self.__head

while cur is not None:

if cur.data == item:

return True

cur = cur.next

return False

if __name__ == '__main__':

sll = SingleLinkList()

print(sll.is_empty())

print(sll.length())

sll.append(1)

sll.append(2)

sll.append(3)

sll.append(4)

sll.append(5)

sll.travel() # 12345

print(sll.length()) # 5

sll.add(99) # 99 12345

sll.travel()

print(sll.length()) # 6

print(sll.search(6)) # False

print(sll.search(4)) # True

sll.remove(3)

sll.travel() # 99 1245

python 链表操作 优化_python---单链表的常用操作相关推荐

  1. python中链表是什么_python 单链表的实现

    常见的数据结构有链表,队列,栈,二叉树,哈希表,图等.其中最简单的是单链表. 单链表实质是在内存上存在的一些不连续的数据,不同数据之间通过节点存储的位置信息来连接.对比数组,他们是在内存上连续存在的一 ...

  2. python excel提取 替换_python代替excel的常用操作

    numpy常用函数 %matplotlib notebook import matplotlib.pyplot as plt import numpy as np x1=np.arange(100)# ...

  3. Python如何创建一个单链表,以及实现单链表的增,删,改,查操作,以及对单链表的排序功能

    标题Python如何创建一个单链表,以及实现单链表的增,删,改,查操作,以及对单链表的排序功能 #功能: 实现单链表的构建和功能操作 #定义单链表的类 class Node:""& ...

  4. python实现带头结点的单链表的就地逆置_设头指针为head,编写算法实现带头结点单链表head的就地逆置...

    链表问题大全!!!刚出炉的还热乎呢!! #include #include typedef struct node { int nDate; struct node *pstnext; }Node; ...

  5. c语言pop逆置单链表,C语言实现单链表

    实现单链表的以下操作: list.h: #ifndef __LIST_H__ #define __LIST_H__ #include #include #include typedef int Dat ...

  6. 链表的特点,单链表的定义、存储结构,单链表的基本操作(判断链表是否为空、销毁链表、清空链表、求链表表长、查找、插入、删除,建立单链表)

    目录 一.链表(链式存储结构)的特点 二.单链表的定义和表示 1.带头结点的单链表 2.单链表的存储结构 三.单链表基本操作的实现 1.单链表的初始化(带头结点的单链表) 2.补充单链表的几个常用简单 ...

  7. 链表详解(单链表、双向链表、链表逆序)

    目录 线性表 顺序存储结构 链式存储结构 单链表 单链表定义 单链表基本操作(仅供参考) 实例 循环单链表的状态图 双向链表 双向链表定义 双向链表特点 双向链表基本操作(仅供参考) 实例 双向链表的 ...

  8. 03-java数据结构之链表的学习(单链表、双链表等)

    文章目录 1.链表 1.1 链表的介绍 2.单链表 2.1.单链表的显示 2.2.单链表的添加操作 2.2.1.直接添加到链表的尾部 2.2.2.根据no插入到指定位置 2.3.单链表节点的修改 2. ...

  9. 判断一个链表是否为循环单链表

    判断一个链表是否为循环单链表: #设置两个指针(fast, slow),slow步长为1,fast步长为2, 大概的思路如下: 如果链表为循环单链表,则fast与slow必定相遇. 如果链表不为循环单 ...

  10. 删除链表的中间节点 Java实现_【链表问题】删除单链表的中间节点

    前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢. [题目描述] 给定链表的头节点head ...

最新文章

  1. String的那一大堆事儿--1
  2. 遍历所有点的最短路径python_所有节点最短路径
  3. java 四则运算 栈的实现
  4. SAP Spartacus PageMetaService 的单元测试
  5. 王道考研 计算机网络10 物理层设备 中继器 集线器
  6. 手机上python编程工具3和3h有区别吗_Python3.5内置模块之time与datetime模块用法实例分析...
  7. python删除列表中的元素
  8. cacti监控 磁盘I/O
  9. GO语言学习之路17
  10. Java程序开发工具 JCreator
  11. ab 测试工具(Linux Windows)
  12. vbs格式编程教程基础
  13. 数学——每日一题7 1.14 利用定积分的定义求极限
  14. Mac 使用 Aria2 下载百度网盘资源
  15. Openwrt 硬改过程记录
  16. 戴尔台式计算机usb驱动,dell服务器和电脑不支持usb2.0设备安装系统的解决方案方法...
  17. 终极自由之路:第二章 问题以及解决之道
  18. vue v-model 双向绑定表单元素的数据:实质是绑定了value、checked、selected属性
  19. 【C语言】初识指针(终篇)
  20. 【我的渲染技术进阶之旅】关于C++轻量级界面开发框架Dear ImGui介绍

热门文章

  1. oracle or索引失效,以下Oracle错误意味着什么:无效的列索引
  2. arcgis风向_[ArcGIS] 空间分析(六) 追踪分析(台风路径)
  3. 主板有电无法启动_电脑无法开机?这篇文章让你省下几百修理费
  4. java 静态方法 构造方法,Java构造函数和静态方法
  5. python3.9新特性_Python3.9又更新了:dict内置新功能
  6. java map 实例_java中map集合嵌套形式简单示例
  7. 一个简单计算器demo 拥有记忆和记忆清除功能
  8. linux删除具有指定内容的文件,Linux bash删除文件中含“指定内容”的行功能示例...
  9. java通过jdbc访问mysql,update数据返回值的思考
  10. console输出彩色字体