python---单链表的常用操作
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单链表
		Python 实现单链表 在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表). 基于数组的序列和链表都能够对其中的元素保持一定得顺序,但采用的方式 ... 
- Java实现单链表的各种操作
		Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ... 
- 超详细!盘点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单链表
		#!/usr/bin/env python3 # -*- coding:utf-8 -*- class LNode: """ 结点类 """ ... 
- 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 
随机推荐
- 微服务从代码到k8s部署应有尽有大结局(k8s部署)
			我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ... 
- JVM学习总结(一)
			JVM--Java虚拟机 1.类加载器 JVM虚拟机的类加载器有三个 bootstrapClassLoader 引导类加载器 是有C语言编写,在JVM虚拟机启动时 加载到内存中负责加载rt.jar夹包 ... 
- 和风天气WebApi使用教程
			1.首先进入和风天气开发平台,点击右上角的注册进行注册 和风天气开发平台 2.填写注册用的邮箱和密码完成注册,可能还需要手机号,按提示注册完成即可. 3.从和风天气开发平台右上角进入控制台,输入你刚刚 ... 
- python 命令行参数学习(一)
			用了这么久,还没怎么学习python的命令行参数,是在惭愧. 参考文章地址:http://www.cnblogs.com/jianboqi/archive/2013/01/10/2854726.htm ... 
- python练习册 每天一个小程序 第0004题
			1 #-*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述:任一个英文的纯文本文件,统计其中的单词出现的个数. 5 参考学习链接: 6 re ht ... 
- 06分频计数器之LED闪烁1
			一设计功能是:让LED灯每1秒亮一次,再灭一秒,闪烁时间周期为2秒. 二分频的介绍: (一)设计方式:IP核和自己动手写. (二)对于分频的构成:一个是计数器,还有时钟翻转.方法一是计满整个周期,一半 ... 
- 如何使用 Spring Boot 实现分页和排序?
			使用 Spring Boot 实现分页非常简单.使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法. 
- docker-compose配置django web项目容器和EMQX容器
			1.Dockerfile FROM gatewayserver_null:v1.1 ADD ./GatewayServer /code ADD ./entrypoint.sh /code# 给entr ... 
- idea-spring-boot打包jar/var
			下面的插件配置的里面需要加上具体的main类 <groupId>org.springframework.boot</groupId> <artifactId>spr ... 
- List、Set、Map 和 Queue 之间的区别?
			List 是一个有序集合,允许元素重复.它的某些实现可以提供基于下标值的常量 访问时间,但是这不是 List 接口保证的.Set 是一个无序集合. 
