文章目录

  • 1.定义结点类
  • 2.定义链表类
    • 2.1.打印整个链表
    • 2.2.获取链表长度
    • 2.3.链表头部插入元素
    • 2.4.链表尾部插入元素
    • 2.5.链表任意位置插入元素
    • 2.6.链表任意位置删除元素
    • 2.7.链表中插入一堆数据
    • 2.8.链表中某一元素后插入值
    • 2.9.链表中某一元素后删除值
  • 3.完整代码+测试

1.定义结点类

class Node:def __init__(self,data=None,next=None):     #传入值和指针self.data = data        #data赋值self.next = next        #next赋值

2.定义链表类

class LinkedList:def __init__(self):self.head = None       #初始化头结点为None

下面将在链表类中封装处理链表的一系列操作。

2.1.打印整个链表

def print(self):if self.head is None:         #链表为空print("Linked list is empty")return itr = self.head      #itr指向头指针llstr = ''      #初始化链表while itr:llstr += str(itr.data) + '-->'   #拼接链表操作itr = itr.next     #指针后移print(llstr)     #遍历完链表后,打印

2.2.获取链表长度

def get_length(self):count = 0         itr = self.head    #itr指向头指针while itr:count += 1     #计数itr = itr.next   #指针后移return count   #打印链表长度

2.3.链表头部插入元素

def insert_at_begining(self,data):node = Node(data, self.head)    #实例化一个待插入的结点,该结点的指针指向头结点self.head = node       #把实例化的新结点插在头结点上

2.4.链表尾部插入元素

def insert_at_end(self,data):if self.head is None:     #当链表为空时,把实例化的结点做为头结点,注意此时结点也是为尾结点,故指针为Noneself.head = Node(data,None)return itr = self.head        #itr指向头指针while itr.next:        #依次遍历,直到当前链表的尾结点itr = itr.nextitr.next = Node(data,None)  #实例化一个结点插到链表尾部,注意此时结点是尾结点,故指针为None

2.5.链表任意位置插入元素

def insert_at(self, index, data):if index < 0 or index > self.get_length():     #插入位置越界raise Exception("Invalid Index")if index == 0:                      #相当于在第一个位置插入结点self.insert_at_begining(data)returncount = 0itr = self.headwhile itr:if count == index-1:              #在index前(即index-1处)插入结点node = Node(data, itr.next)    #实例化一个新的结点,新的结点的指针指向当前itr的下一个结点itr.next = node                #在当前itr后插入实例化的结点breakitr = itr.next         count += 1

2.6.链表任意位置删除元素

def remove_at(self, index):if index<0 or index>=self.get_length():     #删除位置越界raise Exception("Invalid Index")if index == 0:                      #删除链表第一个结点self.head = self.head.next      #只需把把头结点的指针往后移动一个即可returncount = 0itr = self.head       while itr:if count == index-1:         #找到待删除结点的上一个结点itr.next = itr.next.next   #itr的指针指向它的下下个结点breakitr = itr.nextcount += 1

2.7.链表中插入一堆数据

def insert_values(self, data_list):self.head = Nonefor data in data_list:      #依次插入data_list的每个元素  self.insert_at_end(data)    #调用在尾部插入函数insert_at_end

2.8.链表中某一元素后插入值

def insert_after_value(self, data_after, data_to_insert):if self.head is None:return if self.head.data == data_after:self.head.next = Node(data_to_insert,self.head.next)return itr = self.headwhile itr:if itr.data == data_after:itr.next = Node(data_to_insert,itr.next)breakitr = itr.next

2.9.链表中某一元素后删除值

def remove_by_value(self, data):if self.head is None:returnif self.head.data == data:self.head = self.head.nextreturn itr = self.headwhile itr.next:if it.next.data == data:itr.next = itr.next.nextbreakitr = itr.next

3.完整代码+测试

class Node:def __init__(self,data=None,next=None):     #传入值和指针self.data = data        #值self.next = next        #指向下一个结点的指针class LinkedList:def __init__(self):self.head = None       #初始化头结点为Nonedef print(self):if self.head is None:         #链表为空print("Linked list is empty")return itr = self.head      #如果链表不空,itr指向头指针llstr = ''      #初始化链表llstrwhile itr:llstr += str(itr.data) + '-->'   #拼接链表操作itr = itr.next     #指针后移print(llstr)     #遍历完链表后,打印  def get_length(self):count = 0         itr = self.head    #itr指向头指针while itr:count += 1     #计数itr = itr.next   #指针后移return count   #打印链表长度def insert_at_begining(self,data):node = Node(data, self.head)    #实例化一个待插入的结点,该结点的指针指向头结点self.head = node       #把实例化的新结点插在头结点上def insert_at_end(self,data):if self.head is None:     #当链表为空时,把实例化的结点做为头结点,注意此时结点也是为尾结点,故指针为Noneself.head = Node(data,None)return itr = self.head        #如果链表不为空,itr指向头指针while itr.next:        #依次遍历,直到当前链表的尾结点itr = itr.nextitr.next = Node(data,None)  #实例化一个结点插到链表尾部,注意此时结点是尾结点,故指针为Nonedef insert_at(self, index, data):if index < 0 or index > self.get_length():     #插入位置越界raise Exception("Invalid Index")if index == 0:                      #相当于在第一个位置插入结点self.insert_at_begining(data)returncount = 0itr = self.headwhile itr:if count == index-1:              #在index前(即index-1处)插入结点node = Node(data, itr.next)    #实例化一个新的结点,新的结点的指针指向当前itr的下一个结点itr.next = node                #在当前itr后插入实例化的结点breakitr = itr.next         count += 1def remove_at(self, index):if index<0 or index>=self.get_length():     #删除位置越界raise Exception("Invalid Index")if index == 0:                      #删除链表第一个结点self.head = self.head.next      #只需把把头结点的指针往后移动一个即可returncount = 0itr = self.head       while itr:if count == index-1:         #找到待删除结点的上一个结点itr.next = itr.next.next   #itr的指针指向它的下下个结点breakitr = itr.nextcount += 1def insert_values(self, data_list):self.head = Nonefor data in data_list:      #依次插入data_list的每个元素  self.insert_at_end(data)    #调用在尾部插入函数insert_at_enddef insert_after_value(self, data_after, data_to_insert):if self.head is None:return if self.head.data == data_after:self.head.next = Node(data_to_insert,self.head.next)return itr = self.headwhile itr:if itr.data == data_after:itr.next = Node(data_to_insert,itr.next)breakitr = itr.nextdef remove_by_value(self, data):if self.head is None:returnif self.head.data == data:self.head = self.head.nextreturn itr = self.headwhile itr.next:if it.next.data == data:itr.next = itr.next.nextbreakitr = itr.next#实例一
ll = LinkedList()     #实例化链表类
ll.insert_values(['banana','mango','grapes','orange'])    #插入一堆元素
ll.insert_at(1,"blueberry")   #某一位置插入一个元素
ll.print()    #打印当前链表
ll.remove_at(2)     #删除某一位置元素
ll.print()   #打印当前链表#实例二
ll_2 = LinkedList()    #实例化链表类ll_2
ll_2.insert_values([45,7,12,567,99])  #插入一堆数值型元素
ll_2.insert_at_end(67)    #在尾部插入一个元素
ll_2.print()     #打印当前链表

实例一结果:

实例二结果:

Python数据结构实战——单向链表(LinkedList)相关推荐

  1. Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)

    Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...

  2. Java版数据结构之单向链表

    Java版数据结构之单向链表 我的代码仓库:https://github.com/zhuangbinan/datastructure package club.zhuangbinan.linkedli ...

  3. Python数据结构 四种链表的集合

    python数据结构四个链表的集合 结点的创建 import os# 创建节点 class Node:def __init__(self, data):self.data = dataself.nex ...

  4. Python数据结构学习笔记——链表:无序链表和有序链表

    目录 一.链表 二.无序链表 实现步骤分析 三.无序链表的Python实现代码 四.有序链表 实现步骤分析 五.有序链表的Python实现代码 结语 一.链表 链表中每一个元素都由为两部分构成:一是该 ...

  5. 数据结构 (二) ----- 单向链表双向链表

    相关文章: <数据结构 (一) ----- 数据结构基本概念&基于数组实现线性表> <数据结构 (二) ----- 单向链表&双向链表> 文章目录 单链表 一. ...

  6. CodeSalt | Python数据结构的实现 — 链表

    Python数据结构实现-链表 1. 简单介绍 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Point ...

  7. 算法与数据结构(part6)--单向链表

    学习笔记,仅供参考,有错必纠 参考自:单链表头指针.头结点.头元结的辨析 文章目录 算法与数据结构–基于python 链表 为啥需要链表 什么是链表 单向链表 什么是单向链表 单列表的操作 节点的实现 ...

  8. python链表结构_CodeSalt | Python数据结构的实现 — 链表

    Python数据结构实现-链表 1. 简单介绍 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Point ...

  9. python数据结构之单链表

    今天终于把大学都没想明白的链表数据结构整明白了,也算小小的收获,挺好玩的.文后附链表操作示意图. 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. ...

最新文章

  1. Git -- 基本操作 之 版本回退
  2. 照抄不翻车:抗住千万流量的大型分布式系统架构设计
  3. 周长相等的正方形面积一定相等_习题创编——周长相等的长方形面积(20200108)...
  4. 160 - 40 DaNiEl-RJ.1
  5. 力扣题目——160. 相交链表
  6. 在Python中使用设置文件的最佳做法是什么? [关闭]
  7. list, tuple, dict, set的用法总结
  8. Tomcat服务器端口修改,tomcat服务器配置端口 tomcat端口号修改操作步骤
  9. 【STM32H7教程】第2章 STM32H7的开发环境搭建
  10. 手机不能打电话没有信号无服务器,手机信号故障排除方法
  11. markdown笔记1--设置字体、颜色、图片、背景色
  12. c++ 11 for循环
  13. MapGuide 添加临时点图层
  14. 周浩正:写给编辑人的信 从“紫牛”说起
  15. 青岛新媒体运营教程:教你玩转抖音企业号,6步玩转抖音蓝v号
  16. Basics Algorithms| 岭回归(Ridge regression)
  17. 好的网站好的论坛社区
  18. 解决CSS样式重复定义带来的冲突问题
  19. php购物车登录用cookie,php利用cookies实现购物车的方法
  20. Python 发邮件(500, b‘Error: bad syntax‘)

热门文章

  1. 【李宏毅2020 ML/DL】P43-44 More about Adversarial Attack | Images Audio
  2. iOS 手机摇一摇功能
  3. 用计算机弹雅俗共赏,聊聊雅俗共赏:钢琴、饺子和面
  4. 三个关于“契约精神”的故事(转)
  5. thinkphp框架环境部署
  6. 正宗PC Unix实验环境
  7. ubuntu10.04以及10.10安装配置tftp服务
  8. 关于Servlet报错:405 HTTP method GET is not supported by this URL问题解决方法
  9. 开机没有自检声,显示器无信号及各版本BIOS报警信号大全 转
  10. 图解XP局域网共享设置教程汇总A