算法刷题记录6 - 反转链表和链表两两交换

哎,都两周没刷题了,罪过

第一题

2023.10.29 周日
上链接
206. 反转链表
难度:简单
代码随想录 文档
代码随想录 视频
这道题说难不难,但是也不知道是太久没写没感觉了还是确实细节多,不看视频确实感觉不出写的问题在哪。。最大的问题是,我忘了单向链表的next赋了新值之后,之前的指向已经断了。。
双指针法

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {// 双指针法// 思路是 原地调换链表指针指向ListNode left = null; // 为什么是null呢?因为反转以后尾结点后面指向的是nullListNode right = head;ListNode tmp = null;// 从头结点朝着尾结点去反转指针方向while (right != null) { // 边界值怎么判断呢?当left为原来的尾结点的时候,right应该为null,不用再次指向left了,也就是可以不用再循环了tmp = right.next; // 为什么要保存这个呢?因为当右节点的next指向左节点的时候,原来right到原来right.next的链断了,找不到right.next了,循环进行不了了,所以提前保存。right.next = left;left = right; // 这个也要在right右移之前,调换顺序就不对了right = tmp; // 等于tmp,因为此时的right.next已经是left了}return left; // 循环结束,right为空,left为原来的尾结点也是反转后新表的头结点}
}

递归法

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {// 递归法return reverse(null, head); // 初始值}private ListNode reverse(ListNode left, ListNode right) {if(right == null) return left; // 递归出口,right为空则不需要再用right指向leftListNode tmp = right.next; // 保存下一个节点right.next = left; // 指针反向// left right 右移// left = right;// right = tmp;return reverse(right, tmp); // 自调用,值为原来更新的位置}
}

时空复杂度:On、O1

第二题

2023.10.29 周日
上链接
24. 两两交换链表中的节点
难度:中等
代码随想录 文档
代码随想录 视频
这道题和上一道有非常的类似,都是链表节点指针变换,区别在于边界值判断和怎么改变指针。
过程(黑色是原先的指针,红色是处理后的指针)
在这里插入图片描述
理解了这个图,就能理解这个题怎么做。
然后为什么要保存这么多节点呢?还和上一题一样。以上面这个图为例,
cur指向2,那么cur指向1的指针就断了,2可找不到1,所以提前firstnode记下;
继续,2要指向1,那么2到3就断了,3是下一个操作区间的起点,所以也要提前记下 叫temp;
有一说一,这样其实不用secondnode了,因为这已知的。

第二题还有操作,连temp也不用留,比如说1已经记到firstnode,cur指到2的时候,此时1的next指向3,2的next指向1,其实这轮操作就已经完成了。不过乍一看容易混淆,还是老老实实看上面就行。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode swapPairs(ListNode head) {// # 交换相邻节点顺序// # 为了统一处理所有节点,使用虚拟头结点if (head == null || head.next == null)return head;ListNode dummy = new ListNode(-1); // 虚拟头结点dummy.next = head;ListNode cur = dummy;ListNode temp; // 临时节点,保存两个节点后面的节点ListNode firstnode; // 临时节点,保存两个节点之中的第一个节点ListNode secondnode; // 临时节点,保存两个节点之中的第二个节点while (cur.next != null && cur.next.next != null) { // cur开始是dummy,不会为空,奇数节点时,偶数节点时temp = cur.next.next.next;firstnode = cur.next;secondnode = cur.next.next;cur.next = secondnode;       // 步骤一secondnode.next = firstnode; // 步骤二firstnode.next = temp;      // 步骤三cur = firstnode; // cur移动,准备下一轮交换}return dummy.next;}
}

时空复杂度:On、O1

小结

前两天看了看py的语法,试图用py去写,发现链表没学还是不大会,哎,再等一会吧。然后今天的题,还是有点掉感觉了,写的也慢。。两道肯定是不够的,感觉不到位,有空继续的时候看看写写加点新的。

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

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

相关文章

边缘计算技术的崭新篇章:赋能未来智能系统

边缘计算是近年来云计算和物联网技术发展的重要趋势。通过将数据处理和分析从云端迁移到设备边缘,边缘计算能够实现更低的延迟和更高的数据安全。本文将探索边缘计算技术的最新进展及其在不同行业中的应用场景。 1. 实时数据处理与决策 在需要快速响应的场景中&…

理解android AIDL

理解Android AIDL 在研究了 Android Frameworks 中进程间通信(IPC)相关的一些程序后,了解到 Android 系统中进程间通信的机制绝大部分就是 Binder,主要表现在系统服务的调用,app进程间功能调用等。而 Android 上实现 …

虚幻C++基础 day1

虚幻C概念 虚幻C类的继承结构 虚幻引擎C类层级结构(Hierarchy) 这些基本类又派生出了很多子类,例: UE中的反射与垃圾回收系统 例如一个创建了一个Actor类,有一个Actor类型指针去指向这个Actor类,如果的指针被销毁了&#xff…

38基于matlab的期货预测,利用PSO优化SVM和未优化的SVM进行对比,得到实际输出和期望输出结果。

基于matlab的期货预测,利用PSO优化SVM和未优化的SVM进行对比,得到实际输出和期望输出结果。线性核函数、多项式、RBF核函数三种核函数任意可选,并给出均方根误差,相对误差等结果,程序已调通,可直接运行。 3…

谈API接入必须了解的各大API调用电商API应用场景

哪些业务场景可以使用API接口? (1)爬虫业务:在爬虫业务中,使用API接口可以帮助解决IP限制、反爬虫策略等问题,提高爬取数据的效率和稳定性。 (2)网络安全:在网络安全领…

虚拟化、容器与Docker基本介绍以及安装部署(Docker 基本管理)

虚拟化、容器与Docker基本介绍以及安装部署(Docker 基本管理) 1、Docker 概述1.1Docker与虚拟机的区别1.2容器在内核中支持2种重要技术:1.3Docker核心概念 2、安装docker服务docker安装步骤详解 3、 网络优化4、docker基本命令4.1查看镜像——…

代码随想录算法训练营第三十九天丨 动态规划part02

62.不同路径 思路 动态规划 机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。 按照动规五部曲来分析: 确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发&#…

荣电集团与钕希科技签署全面战略合作

10月26日,荣电集团(以下简称荣电)与钕希科技南京有限公司(以下简称钕希科技)今天在合肥市签署全面战略合作协议,联合进军混合现实(Mixed Reality,以下简称MR)空间计算高科…

leetcode-字符串

1.反转字符串LeetCode344. 20230911 难度为0,此处就不放代码了 注意reverse和swap等一系列字符串函数什么时候该用,记一记库函数 swap可以有两种实现,涨知识了,除了temp存值还可以通过位运算:s[i] ^ s[j]; s[j] ^ s[i…

【c++|opencv】二、灰度变换和空间滤波---1.灰度变换、对数变换、伽马变换

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 灰度变换、对数变换、伽马变换 1. 灰度变换 #include <iostream> #include <opencv2/opencv.hpp>using namespace std; using namespace c…

03_Flutter自定义下拉菜单

03_Flutter自定义下拉菜单 在Flutter的内置api中&#xff0c;可以使用showMenu实现类似下拉菜单的效果&#xff0c;或者使用PopupMenuButton组件&#xff0c;PopupMenuButton内部也是使用了showMenu这个api&#xff0c;但是使用showMenu时&#xff0c;下拉面板的显示已经被约定…

Redis(10)| I/O多路复用(mutiplexing)

上文select/epoll 在上文《Redis&#xff08;09&#xff09;| Reactor模式》 思考问题可以使用I/O多路复用技术解决多多客户端TCP连接问题&#xff0c;同时也提到为了解决最早期的UNIX系统select调用存在的四个问题。 select(int nfds, fd_set *r, fd_set *w, fd_set *e, stru…

动手学深度学习——第七次学

LeNet&#xff08;LeNet-5&#xff09;由两个部分组成&#xff1a; 卷积编码器和全连接层密集块 卷积把高宽不断变小&#xff0c;把通道数逐渐增多&#xff0c;&#xff08;最后高宽会变成&#xff0c;通道会变得很大&#xff0c;然后做全连接进行输出&#xff09;通道信息可以…

7+共病思路。WGCNA+多机器学习+实验简单验证,易操作

今天给同学们分享一篇共病WGCNA多机器学习实验的生信文章“Shared diagnostic genes and potential mechanism between PCOS and recurrent implantation failure revealed by integrated transcriptomic analysis and machine learning”&#xff0c;这篇文章于2023年5月16日发…

人到中年应该怎么交朋友

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

虚拟机克隆

linux系统的组成&#xff1b; 主根目录和根目录; 所有的根目录都包含在主根目录中&#xff1b; 根目录&#xff1a; /root /home/xxx,yyy,zzz;主根目录&#xff1b;/ 一个重要的子目录&#xff1a;etc passwd, 保存了所有的三类用户信息&#xff1b;bashrc, 可以设置别名 及…

HarmonyOS开发:基于http开源一个网络请求库

前言 网络封装的目的&#xff0c;在于简洁&#xff0c;使用起来更加的方便&#xff0c;也易于我们进行相关动作的设置&#xff0c;如果&#xff0c;我们不封装&#xff0c;那么每次请求&#xff0c;就会重复大量的代码逻辑&#xff0c;如下代码&#xff0c;是官方给出的案例&am…

阿里云推出通义千问App,提供全方位的协助

&#x1f989; AI新闻 &#x1f680; 阿里云推出通义千问App&#xff0c;提供全方位的协助 摘要&#xff1a;阿里云旗下大模型通义千问App登陆各大安卓应用市场&#xff0c;具有超大规模预训练模型&#xff0c;可在创意文案、办公助理、学习助手、趣味生活等方面协助用户。功…

Transformer.js简明教程【Web AI】

Transformers.js 可在你的 Web 浏览器中实现最先进的机器学习&#xff0c;无需服务器。 它提供预训练模型和熟悉的 API&#xff0c;支持自然语言处理、计算机视觉、音频和多模态领域的任务。 借助 Transformers.js&#xff0c;开发人员可以直接在浏览器中运行文本分类、图像分类…

RPC与HTTP的关系

首选理清楚关系 RPC与HTTP是两个不同维度的东西 HTTP 协议&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff0c;又叫做超文本传输协议&#xff0c;是一种传输协议&#xff0c;平时通过浏览器浏览网页网页&#xff0c;用到的就是 HTTP 协议。 而 RPC&#xff0…