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

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

一、分析题目要求

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

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

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

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

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

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

python 复制代码
# 链表节点类
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、完成输入任务

python 复制代码
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、完成输出任务

python 复制代码
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 方法一样,定义为链表类的一个方法,方法需要接收一个参数。

python 复制代码
# 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 方法即可。

python 复制代码
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.")
相关推荐
何大春7 分钟前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
在下不上天15 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
SEVEN-YEARS19 分钟前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow
EterNity_TiMe_24 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
dr李四维31 分钟前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
Suyuoa35 分钟前
附录2-pytorch yolov5目标检测
python·深度学习·yolo
好看资源平台2 小时前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python
进击的六角龙2 小时前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂2 小时前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc2 小时前
Python简介以及解释器安装(保姆级教学)
开发语言·python