python_ACM模式《剑指offer刷题》链表1

题目:

面试tips:

询问面试官是否可以改变链表结构

思路:

1. 翻转链表,再遍历链表打印。

2. 想要实现先遍历后输出,即先进后出,因此可借助栈结构。

3. 可用隐式的栈结构,递归来实现。

代码实现:

1.

class ListNode:def __init__(self, val = 0, next = None):self.val = valself.next = nextclass myClass:def printList(self, head):# 前后指针翻转链表prev, curr = None, headwhile curr:tmp = curr.nextcurr.next = prevprev, curr = curr, tmp# 翻转后prev即指向新链表的头节点# 打印链表curr = prevwhile curr:print(curr.val)curr = curr.nextif __name__ == '__main__':# 构造测试用例 -- 用数组构造链表arr = [5,4,2,3]head = ListNode(arr[0]) if arr else Nonecurr = headfor i in range(1, len(arr)):curr.next = ListNode(arr[i])curr = curr.next# 执行函数a = myClass()a.printList(head)

2.

class ListNode:def __init__(self, val = 0, next = None):self.val = valself.next = nextclass myClass:def printList(self, head):# 定义一个栈,用来存储遍历过的链表节点stack = []curr = headwhile curr:stack.append(curr)curr = curr.next# 打印链表值,这里pop出来也可释放内存while stack:node = stack.pop()print(node.val)if __name__ == '__main__':# 构造测试用例 -- 用数组构造链表arr = [5,4,2,3]head = ListNode(arr[0]) if arr else Nonecurr = headfor i in range(1, len(arr)):curr.next = ListNode(arr[i])curr = curr.next# 执行函数a = myClass()a.printList(head)

3.

采用递归的思想 注意是递归到最后一个元素才开始打印 即要先写递归 后写打印代码

class ListNode:def __init__(self, val = 0, next = None):self.val = valself.next = nextclass myClass:def printList(self, head):# 递归打印链表 -- 递归就是栈 也就相当于使用了一个隐式的栈结构# 终止条件if not head:return# 单层递归逻辑 -- 先递归后打印self.printList(head.next)print(head.val)if __name__ == '__main__':# 构造测试用例 -- 用数组构造链表arr = [5,2,6,3,5,4]head = ListNode(arr[0]) if arr else Nonecurr = headfor i in range(1, len(arr)):curr.next = ListNode(arr[i])curr = curr.next# 执行函数a = myClass()a.printList(head)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于蛙跳优化的神经网络数据预测matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 通过蛙跳优化算法,优化神经网络的权值参数,然后使用优化后的神经网络模型对数据进行预测,输出预测曲线。 2.测试软件版本以及…

【C工具】【串口助手】C语言操作虚拟串口和物理串口

虚拟串口基础读写例子,记录备忘 环境:win10 mingw64 操作虚拟串口和物理串口的区别只是串口名称不同,需要用个奇怪的写法,比如虚拟串口号为21: char portName[] "\\\\.\\COM21"物理串口就可以直接写串口号…

全桥RLC模态图具体分析

T0时刻,Q6,Q7,Q1.Q4开通,驱动为高电平,励磁电流线性上升,但是lm电流在to是为负电流,这时刻有给副边提供能量,Ip电流开始上升,这个时候给副边的电流也是从0开始上升,这个能量由励磁电感提供,Co给…

【C++】初步认识基于C的优化

C祖师爷在使用C语言时感觉到了不方便的一些点,于是一步一步改进优化,最后形成了C 本文将盘点一下基于C的语法优化 目录 命名空间:命名空间定义:命名空间使用: C输入&输出:cout:endl&#…

Go实现LRU算法

LRU是什么? LRU是内存淘汰策略,LRU (Least recently used:最近最少使用)算法在缓存写满的时候,会根据所有数据的访问记录,淘汰掉未来被访问几率最低的数据。也就是说该算法认为,最近…

Spring源码学习-Spring流程概述(一)

Spring启动的流程 public class Test {public static void main(String[] args) {ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext("applicationContext.xml");Student bean context.getBean(Student.class);context.close();} }调用…

openssl3.2 - 检查rsa证书和私钥是否匹配(快速手搓一个工具)

文章目录 openssl3.2 - 检查rsa证书和私钥是否匹配(快速手搓一个工具)概述效果笔记编程环境界面控件的设置增加文件拖拽的类RSA证书和key是否匹配的实现在程序中加入环境变量备注备注END openssl3.2 - 检查rsa证书和私钥是否匹配(快速手搓一个工具) 概述 在学习openssl官方的…

AI嵌入式K210项目(19)-安装CanMV IDE开发软件

文章目录 前言一、软件下载安装二、软件简介三、设备连接四、在线模拟五、开机运行程序附录:MicroPython固件烧录总结 前言 前几章我们介绍K210使用C语言裸机开发方法,大家对K210内部的硬件和各种加速器有了初步的了解,但是开发人工智能相关…

24.1.24 DAY1 C++

思维导图&#xff1a; 1. 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff0c;要求使用C风格字符串完成 代码&#xff1a; #include <iostream> #include <array> using namespace std;int main(…

c++day1作业

思维导图 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 #include <iostream> #include <iomanip> using namespace std; int main() {string a;cout<<"输入一个字符…

CFD-POST如何使用Expression计算某一点处的物理量

简介 CFD-POST是ANSYS Workbench通用的计算流体力学后处理软件&#xff0c;有时我们需要编写表达式Expression计算阻力系数或升力系数&#xff0c;这时就需要获取出口附近某一点处的气体密度&#xff08;或其他任何物理量&#xff09;。接下来将介绍如何操作 操作方法 Step1…