LeetCode 24:两两交换链表中的节点、1662. 检查两个字符串数组是否相等
今天一道是单链表一道是String类的
一:LeetCode 24:两两交换链表中的节点
先来看一下题目信息
索引
题目意思就是把一个链表中的两两节点进行交换,题目给的例子是4个节点,是偶数个,两两节点进行交换,每个节点都有交换的点,那问题来了,万一给出的是奇数个呢?奇数个的话,只需要把最后一个需要注意的是题目要求我们不仅仅要改链表的val值,而是需要我们进行节点交换,意思就是换地址,换链表的箭头。
在这里我拿题目给出的例子讲解。
解法:递归
递归虽然不太好想明白,但是递归的优势是有目共睹的,代码的量也非常少。难?看不懂?想不通?不存在的!待我一一道来。
问题分析
1、 这是一个包含6个节点的单链表,需要把1、2,3、4,5、6分别交换,如果只是交换两个节点的话这道题是非常简单的,
为什么这么说呢?
假设要交换的是1、2,我只需要把2.next指向1,就可以了。仅仅需要一行代码。
两个指针,一个指向头结点的1,一个指向2。
b.next=a;
这样就变成了b指向a
但题目的要求是需要我们返回交换后的链表,就不能简单这这样操纵了。
2、交换完1,2之后,那我问你?1接下来指向谁?你要回答是3我只能给你6分,你要是回答4我给你9.5分,给你0.5分的进步空间,多了怕你骄傲,因为1,2交换的同时,3,4也是要交换的。
3、每次我们拿到两个节点的时候我, 我们发现b指针到最后总是会到a的前面,也就是说b是每一段的表头上一段连接的是下一段的b,每一段只要返回b就行了。我们又重复了2这个步骤,这时候我们发现可以使用递归来解决了。
3、 但是经过上面的操纵我们发现诶呀,链表断开了,1谁也没有指向了,我们需要一个指针来指向2之前的节点,慌,我们再来一个c指针
4、上代码
class Solution {public ListNode swapPairs(ListNode head){return connect(head);}public ListNode connect(ListNode node){if(node==null){return null;}ListNode left=node;ListNode mid=node.next;//先判断mid是不是空的if(mid==null){return left;}//互逆操作ListNode right=mid.next;mid.next=left;//递归,工具人干活!left.next=connect(right);//返回b,也就是midreturn mid;}
}
还是有一些细节需要注意的,第一个是先进来需要判断一下node是不是为空,如果是直接返回空, 不然有一种白干活了的感觉,第二个if(mid==null)这条判断需要写在 定义right前面,不然会空指针异常,因为先判断了mid才能安心使用right。第三个因为之前图里面返回的永远是b指针,所以在这里我返回的也就是mid了。
结果
当当当当!!! 祝各位读者更快、更强。
二:1662. 检查两个字符串数组是否相等
上题
索引
这道题还是算简单的,跟你两个字符串数组,判断他们是不是相等。
1、
看题目给出的信息我们发现,它调用的参数是连个字符串数组!!!,一说到数组就要注意了,诶,这时候聪明了,先判断它是不是空的。万一有一个是空另一个不是,就一定是false,两个都是空那就是true了。数组长度也有可能是0.
if(word1==null &&word2==null){return true;}if(word1==null ||word2==null){return false;}if(word1.length==0||word2.length==0){return false;}
2、
思路:我们创建俩个字符串str1,str2,用来拼接两个数组中的字符。
String str1="";String str2="";for(int i=0;i<word1.length;i++){str1+=word1 [i];}for(int j=0;j<word2.length;j++){str2+=word2[j];}
3、调用字符串判断方法equals并直接返回
return str1.equals(str2);
4、完整代码
class Solution {public boolean arrayStringsAreEqual(String[] word1, String[] word2) {String str1="";String str2="";if(word1==null &&word2==null){return true;}if(word1==null ||word2==null){return false;}if(word1.length==0||word2.length==0){return false;}for(int i=0;i<word1.length;i++){str1+=word1 [i];}for(int j=0;j<word2.length;j++){str2+=word2[j];}return str1.equals(str2);}
}
结果
起飞
LeetCode 24:两两交换链表中的节点、1662. 检查两个字符串数组是否相等相关推荐
- 想要精通算法和SQL的成长之路 - 两两交换链表中的节点
想要精通算法和SQL的成长之路 - 两两交换链表中的节点 前言 一. 两两交换链表中的节点 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 两两交换链表中的节点 原题链接 给你一个链表,两两 ...
- Leetcode(24)——两两交换链表中的节点
Leetcode(24)--两两交换链表中的节点 题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: ...
- Java实现 LeetCode 24 两两交换链表中的节点
24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...
- LeetCode 23合并K个升序链表24两两交换链表中的节点
维护不易,点赞再看,感谢支持 合并K个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1 ...
- LeetCode 24.两两交换链表中的节点 C语言
题目 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3- ...
- 24. 两两交换链表中的节点-两两反转链表-LeetCode
一.题目 二.思路 1.采用递归的方式 2.可以通过递归的方式实现两两交换链表中的节点. 递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换. 如果链表中至少有两个节点,则在两两 ...
- LeedCode 24:两两交换链表中的节点
两两交换链表中的节点 题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 链接: 24. 两两交换链表中的 ...
- LeetCode-链表-24. 两两交换链表中的节点
24. 两两交换链表中的节点 思路:使用一个头节点,然后用cur指针指向头 /*** Definition for singly-linked list.* struct ListNode {* in ...
- 24.两两交换链表中的节点
24. 两两交换链表中的节点 方法一:迭代,虚拟头结点 class Solution {public ListNode swapPairs(ListNode head) {ListNode dummy ...
最新文章
- 都是套路!要毁灭人类、喷马斯克、还获得公民身份的机器人Sophia,真相确是...
- 移动硬盘提示此卷不包含可识别的文件系统数据如何恢复
- git中找回丢失的对象
- “德国屈臣氏”来天猫!欧洲3000家门店,优质低价背后有啥秘密
- 【HTML】 HTML基础知识 表单
- .NET或将引入类型类和扩展
- 阿里数据总监分享《阿里数据中台建设实践案例》,PPT+语音讲解!
- TensorFlow 中 identity 函数理解
- windows本地凭据备份与还原
- 20162314 Experiment 3 - Sorting and Searching
- Android实现“是否退出”对话框和“带图标的列表”对话框
- 这么多牛逼的Java常用Json库,万万没想到它的性能最好!
- 日本惊现史上最大数字货币被盗案,加密货币交易所疑遭黑客盗走620亿日元!
- 新版中日交流标准日本语多媒体版(全25CD)下载
- 支付宝扫码枪收银的实现原理你了解吗?
- 成功解决excel表格隐藏后右键全选列取消隐藏始终找不出来
- python读取pcd文件_Python读取pcd点云文件
- 2022年餐饮行业的10大必看趋势
- 怎样锁定计算机本地磁盘,win7系统本地磁盘加密的操作方法
- 手写Android热修复