在单向链表的头部插入一个元素

博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!

一、题目

在单向链表 L 头部插入一个元素。

注意,要在为新节点分配 L.head 变量之前设置新节点的 “next” 指针。如果初始列表为空(即 L.head 为空),那么就将新节点的 “next” 指针指向空(None)。

二、基本思想

1、创建一个新的节点;

2、将新节点的数据域设置为新元素,将该节点的 “next” 指针指向当前的头节点;

3、设置列表的头指针指向新节点。

三、图示

四、代码示例

"""
1、在单向链表 L 的头部插入一个元素。
注意:要在为新节点分配 L.head 变量之前设置新节点的“next” 指针。如果初始列表为空(即 L.head 为空),那么就将新节点的“next” 指针指向空(None)。
2、在单向链表的尾部插入一个元素。
注意:在设置尾指针指向新节点之前,设置尾节点的“next”指针指向原来的尾节点。当向一个空链表中插入新节点时,需要考虑空链表不存在尾节点的情况。
3、从单向链表中删除一个元素。
4、删除单向链表的第一个元素。
"""class Empty(Exception):"""试图从空容器中访问元素时出错"""passclass Node(object):"""节点类"""def __init__(self, element, next=None):  # 初始化节点的字段self.element = element  # 元素引用self.next = next    # 指向下一个节点的引用class SingleLinkList(object):"""单向链表"""def __init__(self):self.head = None    # 头节点self.size = 0   # 链表元素个数def init(self, data):"""初始化链表:param data: 需要初始化的列表:return:"""self.head = Node(data[0])cur = self.headfor i in data[1:]:node = Node(i)cur.next = nodecur = cur.nextdef len(self):"""返回链表元素个数:return:"""return self.sizedef is_empty(self):"""判断链表是否为空:return: 如果是空链表,返回真"""return self.size == 0def push(self, e):"""在单向链表的头部插入一个元素Inserts an element in the header of a unidirectional linked list:param e: 新插入的元素 The newly inserted element:return:"""# 创建并链接一个新节点self.head = Node(e, self.head)self.size += 1# 等价于:# 创建新的节点实例,存储对元素e的引用# node = Node(e)# 设置新节点的“next”引用旧的头节点# node.next = self.head# 设置变量头以引用新节点# self.head = node# self.size += 1def append(self, e):"""在单向链表的尾部插入一个元素Inserts an element at the end of a unidirectional linked list:param e: 新插入的元素 The newly inserted element:return:"""# 创建新的节点实例,存储对元素e的引用node = Node(e)# 设置新节点的“next”引用 None 对象node.next = None# 判断链表是否为空if self.is_empty():self.head = nodeelse:# 获取尾节点# get tail nodecur = self.headwhile cur.next is not None:cur = cur.next# 设置尾节点的“next”指向新节点# set the next of the tail node to point to the new nodecur.next = nodedef remove(self, e):"""从单向链表中删除一个元素To remove an element from a unidirectional linked list:param e: 需要删除的元素 Elements that need to be removed:return:"""cur = self.headpre = Nonewhile cur is not None:if cur.element == e:   # 找到要删除的元素# 要删除的元素位于链表头部if cur == self.head:self.head = cur.nextelse:pre.next = cur.nextreturn# 未找到要删除的元素,移动游标pre = curcur = cur.nextdef top(self):"""返回单向链表的第一个元素:return:"""if self.is_empty():raise Empty("Stack is empty")return self.head.elementdef pop(self):"""删除单向链表的第一个元素:return:"""if self.is_empty():raise Empty("Stack is empty")answer = self.head.elementself.head = self.head.nextself.size -= 1return answerdef travel(self):"""遍历链表:return: 链表的每一个元素"""cur = self.headwhile cur is not None:print(cur.element, end=" ")cur = cur.nextprint("")if __name__ == "__main__":link_list = SingleLinkList()print("初始化单向链表:")link_list.init(["MSP", "ATL", "BOS"])link_list.travel()print("在单向链表头部插入元素 LAX:")link_list.push("LAX")link_list.travel()print("在链表的尾部插入元素 MIA:")link_list.append("MIA")link_list.travel()print("删除链表中的节点 ATL:")link_list.remove("ATL")link_list.travel()print("获取链表中的第一个节点元素:")print(link_list.top())print("删除链表中的第一个元素{}:".format(link_list.pop()))link_list.travel()# 运行结果:
# 初始化单向链表:MSP ATL BOS
# 在单向链表头部插入元素 LAX:LAX MSP ATL BOS
# 在链表的尾部插入元素 MIA:LAX MSP ATL BOS MIA
# 删除链表中的节点 ATL:LAX MSP BOS MIA
# 获取链表中的第一个节点元素:LAX
# 删除链表中的第一个元素LAX:MSP BOS MIA 

单向链表—在单向链表的头部插入一个元素相关推荐

  1. 单向链表—在单向链表的尾部插入一个元素

    在单向链表的尾部插入一个元素 博主微信公众号(左).Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步! 一.题目 在单向链表 L 尾部插入一个元素. 注意,在 ...

  2. 单链表-插入一个元素为x的节点后,使链表仍然有序

    单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 这里和顺序表那题题意是一样的,都是插入一个元素节点x后,使链表仍然有序 ...

  3. 数据结构例16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序。

    /* 16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序. */ # include <iostream> # include <stdlib.h> # i ...

  4. java链表的数据结构_Java数据结构 获取链表(LinkedList)的第一个和最后一个元素

    Java数据结构 获取链表(LinkedList)的第一个和最后一个元素 以下实例演示了如何使用 LinkedList 类的 linkedlistname.getFirst() 和 linkedlis ...

  5. 顺序表-插入一个元素x后保持该顺序表L递增有序排序(查找+元素后移插入)

    顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 分析: 要保持插入一个元素后 ...

  6. [jstips]向数组中插入一个元素

    向现有数组中插入一个元素是经常会见到的一个需求.你可以: 使用push将元素插入到数组的尾部: 使用unshift将元素插入到数组的头部: 使用splice将元素插入到数组的中间: 上面那些方法都是常 ...

  7. C语言在一个有序数组里插入一个元素,使其成为一个新的有序数组

    C语言在一个有序数组里插入一个元素,使其成为一个新的有序数组 #include<stdio.h> int main(){int a[11] = { 1,5,8,9,25,26,31,35, ...

  8. go 已知有个排序(升序)的数组,要求插入一个元素,最后打印该数组,顺序依然是升序

    // 任意位置插入数字类型的元素 // @param slice []int 将指定元素插入的切片 // @param num int 插入的指定元素 // @param index int 插入的指 ...

  9. C# 数组增加元素_C语言数组——任意位置插入一个元素

    前言 接着昨天的话题,我们再来看看向C语言的数组中随机插入一个元素的方法. 如果是在python向列表中随机添加元素,我们往往使用insert()的方法. l insert()的第一个参数是位置,第二 ...

最新文章

  1. 可以搜python题答案的app-Python数据分析与数据可视化知到APP答案
  2. Cmd使用方式--命令行运行程序
  3. jQuery对类的操作.addClass()/.removeClass()/.hasClass()方法
  4. html 输入框变红色,input输入框 输入错误时,点击注册按钮,输入框的边框变成红色,重新输入时,边框颜色恢复原来的,同时错误提示消失?...
  5. flash动画设计期末作业_「2019年下学期」第二十五二十六节:期末作品三-吉祥物设计...
  6. 性能调优必备利器之 JMH
  7. Linux下Oracle数据库的搭建(新手)
  8. wrodpress登录mysql_登陆wordpress后台MySQL错误
  9. linux mysql5.7.18多实例_mysql5.7.13二进制包安装多实例
  10. Extjs数据展现原理
  11. 计算机学院少女节条幅,女生节条幅大战又打响了!哪个高校条幅标语最撩人 网友酸了...
  12. java ee框架开发技术与设计教程_Java EE框架开发技术与设计教程
  13. 我在知乎上关于Laser200/310电脑的文章。
  14. d3dx9_43.dll如何修复
  15. 鹏城实验室“鲲鹏”人才引育计划(2022-2025年)
  16. Phaser并发阶段器
  17. 新浪微博基于Docker的混合云架构与应用实践
  18. 阿里巴巴首届设计大赛,王牌大奖最终花落谁家?
  19. python3**2的值,线性回归中的R*2平方值
  20. Android studio成功运行自带模拟器问题详解,捎带中文用户名路径有感

热门文章

  1. 设计一个程序,帮助小学生练习10以内的加法题目
  2. 联想Thinkpad E470 笔记本 无声音解决方案
  3. 编辑器生成静态网页_使用静态网站生成器的7个理由
  4. 认识PV、UV、UV价值
  5. 方法功能增强 - 继承、装饰者模式、动态代理
  6. 舆情监控系统java_java舆情监测系统
  7. java double long 取值_由一道题引起的思考? java中 long 和double都是64位。为什么double表示的范围大那么多呢?...
  8. Java高级之Float类和Double类的isNaN()方法
  9. 什么是期权股权?什么是期权股权原始股?
  10. 面包板入门电子制作 学习笔记7