【代码随想录python笔记整理】第十四课 · 链表的基础操作 2

news2024/11/18 7:32:02

前言:本笔记仅仅只是对内容的整理和自行消化,并不是完整内容,如有侵权,联系立删。

一、分析题目要求

       在前面一课中,我们学习了链表的创建以及新元素的插入,并且我们学会了打印链表中的元素。这节课我们依托上节课的基础继续练习链表的操作。由于一些基础知识我们已经掌握,这节课我们首先来分析这道题目的要求再来作答。

       针对以上问题,我们第一时间会发现主要部分其实和之前一课的链表练习差别不大,都需要首先构建一个链表,再向其中插入数据,最后按要求打印链表的元素。因此首先我们整体观察输入要求,这次不再是无限循环输入,因此不需要使用 try...except... 语句。

       接着我们逐条看输入要求,发现总共有三行输入,第一行有两个数 n,k,分别代表第二行和第三行的元素个数。相应地,第二行和第三行就是想要输入到链表中的元素和我们需要打印出的元素位次。

       然后我们去看输出的要求,这里有两个注意事项:1、每一个元素输出后要换行,再输出第二个数;2、对于位次超过了链表中含有节点个数的情况,我们要输出一行语句,告诉用户输入有问题。

二、根据分析结果分别实现相应任务

1、构建基本的链表框架:

# 链表节点类
class Node:
    def __init__(self,data):
        self.data = data
        self.next = None
# 链表类
class LinkedList:
    def __init__(self):
        self.head_node = None
        self.length = 0
    def insert(self,data):
        self.length += 1
        new_node = Node(data)
        if self.head_node is None:
            self.head_node = new_node
            return self.head_node
        else:
            current_node = self,head_node
            while current_node.next is not None:
                current_node = current_node.next
            current_node.next = new_node
            return new_node

2、完成输入任务

n,k = map(int,input().split())
# 新建链表实例
link_list = LinkedList()
elements = list(map(int,input().split()))
# 循环输入数据并存储到链表中
for data in elements:
    link_list.insert(data)
# 获取所需输出的链表位次
m_values = list(map(int, input().split()))

3、完成输出任务

for m in m_values:
      # 如果 m 位置不合法
    if m < 1 or m > link_list.length:
        print("Output position out of bounds.")
    else:
          # 找到第 m 个节点
        current_node = link_list.headNode
        for _ in range(m - 1):
            current_node = current_node.next
        # 输出第 m 个节点的值
        print(current_node.data)

       依托上面三部分,我们就完成了整个程序,但其实我们可以在类中再构建一个函数,专门用来输出第 m 个元素。

三、寻找第 n 个节点的方法

       其实可以将寻找第 m 个节点和 insert 方法一样,定义为链表类的一个方法,方法需要接收一个参数。

# get方法用于查找 第 n 个节点
def get(self, n):
      # 如果 n 小于 1 或者 大于链表的长度,返回 None
    if n < 1 or n > self.length:
        return None
    i = 1
    # 从头节点开始遍历
    current_node = self.head_node
    while current_node is not None:
        if i == n: #  i == n 的时候 找到第 n 个节点
            return current_node
        i += 1 # i 的值 + 1
        current_node = current_node.next # 移动 current_node指针,转为下一个节点
    # 没有找到第 n 个的节点的情况下,返回 None
    return None

       然后在对应的位置调用 get 方法即可。

m_values = list(map(int, input().split()))
for m in m_values:
    node = link_list.get(m) # 调用 get 方法,获取第 m 个节点
    if node is not None: # 如果节点 不为 None, 输出对应的 data
        print(node.data)
    else: # 否则,则为 m 位置不合法
        print("Output position out of bounds.")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1476179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DataGrip 2023:让数据库开发变得更简单、更高效 mac/win版

JetBrains DataGrip 2023是一款功能强大的数据库IDE&#xff0c;专为数据库开发和管理而设计。通过DataGrip&#xff0c;您可以连接到各种关系型数据库管理系统(RDBMS)&#xff0c;并使用其提供的一组工具来查询、管理、编辑和开发数据库。 DataGrip 2023 软件获取 DataGrip …

2024深度学习主流框架对比

tensorFlow 是最受欢迎和广泛使用的深度学习框架之一&#xff0c;目前在github的start数为181k。 TensorFlow是一个由Google Brain团队开发的开源深度学习框架。它允许开发者创建多种机器学习模型&#xff0c;包括卷积神经网络、循环神经网络和深度神经网络等&#xff0c;该框架…

如何在服务器正确读取resources目录下的文件

1、错误代码 InputStream is new BufferedInputStream(new ClassPathResource("fonts/SourceHanSans-Normal.ttc").getInputStream());文件位置 2、正确代码 ClassPathResource classPathResource new ClassPathResource("fonts/SourceHanSans-Normal.ttc…

Python语言基础与应用-北京大学-陈斌-P29-28-计算和控制流:控制流:上机:基本计算程序-给定y和m,计算y年m月有几天?-上机代码

Python语言基础与应用-北京大学-陈斌-P29-28-计算和控制流&#xff1a;控制流&#xff1a;上机&#xff1a;基本计算程序-给定y和m&#xff0c;计算y年m月有几天?-上机代码 # 给定y和m&#xff0c;计算y年m月有几天? run_y_m_day { # 把闰年的每月天数存入字典 1:31, 2:29, …

导览系统厂家|景区电子导览|手绘地图|AR导览|语音导览系统

随着元宇宙、VR、AR等新技术的快速发展&#xff0c;旅游服务也更加多元化、智能化。景区导览系统作为旅游服务的重要组成部分&#xff0c;其形式更加多元化智能化。智能导览系统作为一种新的服务方式&#xff0c;能够为游客提供更加便捷的旅游服务和游览体验&#xff0c;也逐渐…

django运行项目NameError: name ‘_mysql‘ is not defined

Django运行项目时报错 Django运行项目时报错NameError: name ‘_mysql’ is not defined 安装的mysqlclient 是 2.1.1版本 切换成mysqlclient-2.1.0 运行&#xff0c;解决

高并发数据采集:Ebay商家信息多进程爬虫的进阶实践

背景 Ebay作为全球最大的电子商务平台之一&#xff0c;其商家信息包含丰富的市场洞察。然而&#xff0c;要高效获取这些信息&#xff0c;就需要利用先进的技术手段。本文将深入探讨如何通过并发加速技术&#xff0c;实现Ebay商家信息多进程爬虫的最佳实践方法&#xff0c;并附…

基于Redo log Undo log的MySQL的崩溃恢复

基于Redo log & Undo log的MySQL的崩溃恢复 Redo log Undo log Redo log 重做日志,记录,修改过的数据 Undo log 回滚日志,记录修改之前的数据 两个我不做详细的介绍了,redo log就是记录哪些地方被修改了 undo log是记录修改之前我们的数据长什么样 更新流程 我们来捋一…

springboot-基础-thymeleaf配置+YAML语法

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 目录 配置thymeleafthymeleaf举例参数设置yaml基础知识YAML语法报错&#xff1a;Expecting a Mapping node but got 其他语法 spring boot不推荐使用jsp。thymeleaf是一个XML/XHTML/HTM…

算法沉淀——动态规划之回文串问题(上)(leetcode真题剖析)

算法沉淀——动态规划之回文串问题 01.回文子串02.最长回文子串03.分割回文串 IV04.分割回文串 II05.最长回文子序列06.让字符串成为回文串的最少插入次数 01.回文子串 题目链接&#xff1a;https://leetcode.cn/problems/palindromic-substrings/ 给你一个字符串 s &#xf…

SpringMVC 学习(九)之拦截器

目录 1 拦截器介绍 2 创建一个拦截器类 3 配置拦截器 1 拦截器介绍 在 SpringMVC 中&#xff0c;拦截器 (Interceptor) 是一种用于拦截 HTTP 请求并在请求处理之前或之后执行自定义逻辑的组件。拦截器可以用于实现以下功能&#xff1a; 权限验证&#xff1a;在请求处理之前…

python学习笔记-内置异常

概述 Python 中的异常&#xff08;Exception&#xff09;是指在程序执行过程中遇到的错误或异常情况。当程序出现异常时&#xff0c;解释器会停止当前代码的执行&#xff0c;并试图找到匹配的异常处理器来处理异常。如果没有找到合适的异常处理器&#xff0c;程序就会终止并打…

【MySQL】DCL

DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 1. 管理用户 在MySQL数据库中&#xff0c;DCL&#xff08;数据控制语言&#xff09;是用来管理用户和权限的语句集合。通过DCL语句&#xff0c;可以创建、修改、删…

高性能Server的基石:reactor反应堆模式

业务开发同学只关心业务处理流程。但是我们开发的程序都是运行服务端server上&#xff0c;服务端server接收到IO请求后&#xff0c;是如何处理请求并最终进入业务流程的呢&#xff1f;这里不得不提到reactor反应堆模型。reactor反应堆模型来源于大师Doug Lea在 《Sacalable io …

基于51单片机烟雾报警器数码管显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机烟雾报警器数码管显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0067 1. 主要功能&#xff1a; 基于51单片机的烟雾报警器proteus仿真设…

AxureCloud配置文件详细介绍

AxureCloud配置文件详细介绍 原文地址&#xff1a;https://docs.axure.com/axure-cloud/business/custom-settings-json/ 通过修改 customsettings.json 可以修改AxureCloud私有部署的域名、端口、HTTPS、存储目录、是否开启插件等, 默认安装的路径为: C:\Program Files\Axure…

milvus Upsert api数据结构源码分析

Upsert api数据结构 该方法将实体更新插入到 Milvus 中。如果集合中已存在指定字段&#xff0c;则该操作将覆盖现有实体&#xff1b;如果指定值尚不存在&#xff0c;则插入新实体。 实现:先insert再delete&#xff0c;并限制不能修改主键列。 限制:主键的autoid必须是false。…

【JS逆向学习】猿人学 第三题 罗生门

逆向目标 网址&#xff1a; 目标&#xff1a;session请求 逆向分析 首先分析网络请求&#xff0c;我们发现每次的翻页请求都会有一个jssm请求 从启动器进去跟栈进去 现在观察一下cookie是否有变化&#xff0c;经观察没有发生变化&#xff0c;参数也没有加密&#xff0c;所…

Python打发无聊时光:10.用flask创造按键控制的网页小游戏

第一步&#xff1a;装flask库 在终端输入: pip install flask 第二步&#xff1a;完整代码 为了方便大家移植&#xff0c;我将HTML、CSS和JavaScript直接嵌到一个py文件中。 from flask import Flask, render_template_stringapp Flask(__name__)app.route(/) def game()…

智能水表预付费管理系统

智能水表预付费管理系统是当前智能水表技术的重要应用之一&#xff0c;结合了智能化管理和预付费功能&#xff0c;为水务公司和用户提供了便捷、高效的用水管理解决方案。该系统利用先进的科技手段&#xff0c;实现了水表抄表、计费和管理的自动化&#xff0c;为用户带来更便捷…