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

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

一、题目

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

注意,在设置尾指针指向新节点之前,设置尾节点的“next”指针指向新节点。当向一个空链表中插入新节点时,需要考虑空链表不存在尾节点的情况。

二、基本思想

1、创建一个新的节点;

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

3、设置尾节点的 “next” 指针指向新节点;

4、更新尾指针指向新节点。

三、图示

四、代码示例

"""
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. linux连接小米随身wifi密码忘记了,小米wifi管理员密码忘记了怎么办?
  2. 数据库索引数据结构总结——ART树就是前缀树
  3. Android-support-v4 v7 v8 v13 v17 的区别和特性说明
  4. java 时间api源码,时间API(示例代码)
  5. VS2015 打包添加系统必备组件
  6. (GitHub标星6.9k)超详细的人工智能专家路线图,
  7. 【转】jquery 注册事件的方法
  8. posman使用教程
  9. 关于she'll脚本中echo -e使用sh命令执会显示参数-e-的问题
  10. MySQL的FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别
  11. DXperience 9.1.3
  12. ubuntu无法安装软件问题解决
  13. 轻松搞懂Java中的自旋锁
  14. 层级结构——组合模式
  15. 前端别再错过2022的金三银四了。。
  16. (Yuni)Markdown光速入门
  17. 利用Python求解八数码难题
  18. 二代身份证读卡插件安装包(完整亲测可用).zip
  19. 白盒测试重点复习内容
  20. GPS授时服务器在电厂视频监控系统中的应用

热门文章

  1. 中国大学MOOC大学生心理健康试题及答案
  2. 深入理解时区概念:GMT,UTC,UTS和AOE
  3. 类名.this与类名.class
  4. 单例模式《单例模式概念、什么时候能用到单例模式、单例模式的好处》
  5. WebAssembly之wasm2c工具编译使用
  6. 【OpenCV3图像处理】颜色空间转换(一)颜色空间分类总结
  7. 会声会影2023最新版功能介绍及使用教程
  8. 如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤、内容、聚类、关联规则推荐算法实现WebNewsRSMEx
  9. Java为什么要写get和set方法多此一举呢?
  10. js删除json中指定的元素