一、单向链表实现

在单向链表结构中,每个节点包含两部分,元素部分和指针部分,其中元素部分即为节点的值,指针部分指向下一个节点或者None,另外,为了找到第一个节点,需要定义一个头结点head,它只含有指针,即指向头元素或者None 。

类似于数组具有的增删查改等功能,我们希望单向链表具备这些基本功能,接下来开始自定义单向链表的基本功能。

"""定义节点"""
class Node():def __init__(self, item):self.item = itemself.next = None"""定义单向链表"""
class SingleList():"""将头指针设为链表的私有属性"""def __init__(self, node=None):self.__head = node"""判断是否为空"""def is_Empty(self):return self.__head == None"""链表长度,通过遍历获得需要考虑特殊情况:链表为空时是否能够正确执行"""def get_length(self):cur = self.__headcount = 0while cur != None:count += 1cur = cur.nextreturn countdef traver(self):cur = self.__headwhile cur != None:print(cur.item, end=" ")cur = cur.nextprint()"""头部添加元素需要考虑特殊情况:链表为空时是否能够正确执行"""def addFirst(self, item):node = Node(item)node.next = self.__headself.__head = node"""尾部添加元素,首先需要遍历找到最后一个元素需要考虑特殊情况:链表为空时是否能够正确执行"""def addLast(self, item):node = Node(item)cur = self.__headif cur == None:self.__head = nodeelse:while cur.next != None:cur = cur.nextcur.next = node"""在指定位置添加元素,先找到添加的位置需要考虑特殊情况:在头部和尾部以及为空时能否正确执行"""def insert(self, index, item):if index <= 0:self.addFirst(item)elif index >= self.get_length():self.addLast(item)else:node = Node(item)cur = self.__headcount = 1while count < index:cur = cur.nextcount += 1node.next = cur.nextcur.next = node"""查找元素注意链表为空的特殊情况"""def find(self, item):if self.is_Empty():print("链表为空,无法查找")returncur = self.__headi = 0while cur.next != None and not cur.item == item:cur = cur.nexti += 1                   if cur.item == item:return("找到了,元素%s在%d处" %(item, i))else:return("没找到")"""删除指定位置元素"""def remove(self, index):if self.is_Empty():print("链表为空,无法删除")returnif index < 0 or index > self.get_length():print("索引越界,请检查!")returncur = self.__headpre = Nonecount = 0if index == 0:self.__head = cur.nextreturnelse:    while count != index:pre = curcur = pre.nextcount += 1pre.next = cur.nextreturnif __name__ == "__main__":sl = SingleList()print(sl.is_Empty())sl.find(7)sl.insert(0,9)sl.traver()sl.addFirst(1)sl.traver()sl.addLast(2)sl.addLast(3)sl.addLast(4)sl.addLast(5)sl.addLast(6)sl.traver()sl.insert(-2, 21)sl.traver()sl.insert(20, 25)sl.traver()sl.insert(0, 15)sl.traver()sl.insert(2, 17)sl.traver()print(sl.find(7))print(sl.find(6))sl.remove(3)sl.traver()sl.remove(0)sl.traver()sl.remove(-1)sl.traver()sl.remove(20)sl.traver()

测试结果为:

True
链表为空,无法查找
9
1 9
1 9 2 3 4 5 6
21 1 9 2 3 4 5 6
21 1 9 2 3 4 5 6 25
15 21 1 9 2 3 4 5 6 25
15 21 17 1 9 2 3 4 5 6 25
没找到
找到了,元素6在9处
15 21 17 9 2 3 4 5 6 25
21 17 9 2 3 4 5 6 25
索引越界,请检查!
21 17 9 2 3 4 5 6 25
索引越界,请检查!
21 17 9 2 3 4 5 6 25

单链表基本的增删改查等功能已基本实现,但代码还是有待改善优化

转载于:https://www.cnblogs.com/m-chen/p/10030051.html

Python的单链表实现相关推荐

  1. python实现单链表与双向链表

    首先看单链表class Chain(): def __init__(self):self.first = Noneself.length = 0def is_empty(self):"&qu ...

  2. 使用python定义单链表

    前言 文章来源:CSDN@LawsonAbs 使用python定义一个单链表 链表是面试考察的一个重要部分,下面就介绍如何使用python定义一个单链表. 1. 定义一个节点类 class Node: ...

  3. python实现单链表快速排序升序linkedqueue_同时对多个数组进行排序

    关于 同时对多个数组进行排序的搜索结果 回答 本人学习数据结构时看到的不错的总结,共享一下了 文件有一组记录组成,记录有若干数据项组成,唯一标识记录的数据项称关键字; 排序是将文件按关键字的递增(减) ...

  4. python反转单链表

    原始单链表 反转后单链表 思路: 对于每个节点来说,把她的下一个节点,改为他的上一个节点,然后把下一个节点继续变换 建两个临时变量,上一个节点pred,下一个节点next,初始化为None 第1步,开 ...

  5. 数据结构与算法-python描述-单链表

    # coding:utf-8# 单链表的相关操作: # is_empty() 链表是否为空 # length() 链表长度 # travel() 遍历整个链表 # add(item) 链表头部添加元素 ...

  6. python实现单链表快速排序升序linkedqueue_数据结构1

    一. ( (本题 15 分)试设计一个结点数据类型为整型的带表头结点的有序单 链表,然后设计一个算法,该算法将这个有序单链表划分成两个单链表,使 得第一个单链表中包含原单链表中所有数值为奇数的结点, ...

  7. python实现单链表快速排序升序linkedqueue_LeetCode 总结 - 搞定 Linked List 面试题

    链表删除 [203] Remove Linked List Elements [19] Remove Nth Node From End of List [83] Remove Duplicates ...

  8. python求单链表的长度_709. 设计链表(Python)

    题目 难度:★★☆☆☆ 类型:链表,设计题 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针 ...

  9. python实现单链表快速排序升序linkedqueue_数据结构回顾

    顺序结构 顺序栈(Sequence Stack) 1 2 3 4 5 6typedef struct { ElemType *elem; int top; int size; int incremen ...

最新文章

  1. python搭建numpy_python开发环境搭建及numpy基本属性-【老鱼学numpy】
  2. 机器人抓取汇总|涉及目标检测、分割、姿态识别、抓取点检测、路径规划
  3. 提升 composer 的执行速读
  4. Oracle10g备份集压缩新特性(Backupset Compression)
  5. 快手直播平台演进之路
  6. 财务管理c语言oj,九度OJ 1141:Financial Management (财务管理) (平均数)
  7. 【MySQL】MySQL 8不支持查询缓存
  8. Java8新特性_接口中的默认方法
  9. mfc gridctrl 设置某列自动伸长_三明桥梁智能张拉设备数控智能张拉系统全自动智能张拉系统...
  10. package.json在Node JS应用程序中的重要性
  11. 四大障碍将阻止或减缓广电发展宽带业务
  12. 毕设题目:Matlab数字信号调制
  13. com.thoughtworks.xstream.security.ForbiddenClassException com.thoughtworks.xstream 1.4.18
  14. 飞车手游显示服务器连接失败怎么办,qq飞车手游服务器拉取失败
  15. 关于无法安装.NET Framework3.5的问题(0x800F081F)
  16. 企业进行风险控制的重要意义
  17. 判断电脑是否安装WPS
  18. 历史上的三次数学危机
  19. tcga数据下载_R语言简单学(TCGA数据下载)
  20. linux tar多线程压缩解压

热门文章

  1. win10计算机错误代码,Win10错误代码:0xc00000f 解决方案
  2. 人能为赚钱吃多少苦?
  3. 美团信用卡现金分期怎么还?
  4. 58岁退休女士,想出去旅游却很难约到合适的伴,怎么办?
  5. 两相电机倒顺开关的接法是什么?
  6. 那些不用上班的老人每天是不是很幸福?
  7. 不好的女人只能消耗你,好的女人不仅可以给你一个家和孩子
  8. 给新手开店选品的建议
  9. 今年的大环境很差,创业失败的和失去工作的特别多
  10. SQL Server中的动态SQL