LeetCode 热题 HOT 100 -------160. 相交链表(链表)206. 反转链表(递归、回溯)
dsadas
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*//**
解法一:通过set数据结构来做 时间复杂度O(m+n) 空间复杂度O(max(m,n))如果这个题再复杂一些,就需要用map数据结构*/
// public class Solution {// public ListNode getIntersectionNode(ListNode headA, ListNode headB) {// Set<ListNode> set = new HashSet<>();
// ListNode tempAB = headA;
// while(tempAB!=null){// set.add(tempAB);
// tempAB = tempAB.next;
// }
// tempAB = headB;
// while(tempAB!=null){// if(set.contains(tempAB)){// return tempAB;
// }
// tempAB = tempAB.next;
// }
// return null;
// }
// }/**
解法二:双指针,分别 tempA,tempB,让他们分别遍历headA,headB,当走完各自的链表后,直接再走另一链路:即: tempA 走的 headA+headB temp 走的 headB+headA (具体可以看图的解析)时间复杂度: O(m+n) 空间复杂度O(1)*/
// public class Solution {// public ListNode getIntersectionNode(ListNode headA, ListNode headB) {// ListNode tempA = headA;
// ListNode tempB = headB;
// while(tempA != tempB){ //如果不相交,则它们同时遍历完headA和headB,则返回的为null
// tempA = tempA != null ? tempA.next : headB;
// tempB = tempB != null ? tempB.next : headA;
// }
// return tempA;
// }
// }/** 解法三:
暴力解决*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode tempA = headA;while(tempA != null){ ListNode tempB = headB;while(tempB != null){if(tempA == tempB){return tempA;}tempB = tempB.next;}tempA = tempA.next;}return tempA;}
}
/*** 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; }* }*//**迭代:
通过两个指针进行迭代:
我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。
第二个指针 cur 指向 head,然后不断遍历 cur。
每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。*/
// class Solution {// public ListNode reverseList(ListNode head) {// //申请节点,pre和 cur,pre指向null
// ListNode pre = null;
// ListNode cur = head;// ListNode tmp = null;
// while(cur!=null) {// //记录当前节点的下一个节点
// tmp = cur.next;
// //然后将当前节点指向pre
// cur.next = pre;
// //pre和cur节点都前进一位
// pre = cur;
// cur = tmp;
// }
// return pre;
// }
// }/**递归
递归先写递归头,然后递归体:
一定要注意 head.next.next=head,head是当前的,(head.next是指向下一个节点).next=head是指回来,
也就链表换个防线,然后head.next = null是为了结束递归用*/
class Solution {public ListNode reverseList(ListNode head) {//递归终止条件是当前为空,或者下一个节点为空if(head==null || head.next==null) {return head;}//这里的cur就是最后一个节点ListNode cur = reverseList(head.next);//这里请配合动画演示理解//如果链表是 1->2->3->4->5,那么此时的cur就是5//而head是4,head的下一个是5,下下一个是空//所以head.next.next 就是5->4head.next.next = head;//防止链表循环,需要将head.next设置为空head.next = null;//每层递归函数都返回cur,也就是最后一个节点return cur;}
}
LeetCode 热题 HOT 100 -------160. 相交链表(链表)206. 反转链表(递归、回溯)相关推荐
- LeetCode 热题 HOT 100
LeetCode 热题 HOT 100之JAVA解法 第1题 两数之和(简单) 代码 第2题 两数相加(中等) 代码 第3题 无重复字符的最长子串(中等) 代码 第4题 寻找两个正序数组的中位数(困难 ...
- 《LeetCode 热题 HOT 100》Java答案汇总版---持续更新中
<LeetCode 热题 HOT 100>Java答案汇总版-持续更新中 个人认为<LeetCode 热题 HOT 100>中的题目特别适合算法新手进行一个入门的刷题,而且作者 ...
- LeetCode 热题 HOT 100 完整题解笔记知识点分类 C++代码实现
1.知识点分布 填一下这个之前欠的天坑,复习一下算法入门的经典基础题. 除夕,正月初一,初二,一共写了三整天,除了吃饭就窝着补题. 每天30题+,整个人都写晕啦,终于写完啦() markdown生成 ...
- LeetCode 热题 HOT 100 第四十九天 152. 乘积最大子数组 中等题 用python3求解
题目地址 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 测试用例的答案是一个32-位整数. 子数组 是数组的连续子序 ...
- LeetCode 热题 HOT 100【题型归类汇总,助力刷题】
介绍 对于算法题,按题型类别刷题才会更有成效,因此我这里在网上搜索并参考了下 "
- LeetCode 热题 HOT 100 -------31. 下一个排列(数组,数学问题)128. 最长连续序列(数组) 11. 盛最多水的容器(数组) 621. 任务调度器 (数组)
dsadas /**思路:找下一个排列,并且尽可能小,所以我们应该找一序列中从左边开始的"较小值"与"较大值"交换,但是为了尽可能小应该满足: 1." ...
- 两数相加c++_LeetCode 热题 HOT 100(01,两数相加)
LeetCode 热题 HOT 100(01,两数相加) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力,这也 ...
- Leetcode热题 二分法的主要应用(2)-夹逼准则
持续刷题第13天 ! 今天我们继续刷Leetcode 热题 HOT 100,日复一日,相信自己,一定会有进步.如果一个人刷题太孤独了,欢迎加群每日一题算法群,让我们大家一起监督,一起成长. 此外我还建 ...
- LeetCode 热题100答案
leetcode 热题100 文章目录 leetcode 热题100 [2. 两数相加](https://leetcode-cn.com/problems/add-two-numbers/) [3. ...
最新文章
- linux 使用spinlock的配对关系问题
- 【求推荐】优化SAP使用效率的RPA工具推荐
- 前端学习(1300)报错:无法加载文件 D:\nodejs\node_global\webpack.ps1,因为在此系统上禁止运行脚本...
- PHP单引号 ' ',没有任何意义,对所引内容不经任何处理直接拿过来
- 软件发布版本命名规则
- 拼装机器人感想_智能机器人心得体会
- 通过Shell脚本快速搭建高效Rsync服务
- COJ0700 数学(一)
- 城市定位html,城市定位页.html
- ftdi usb转串口驱动
- 博弈论——扩展式博弈(Extensive Game)
- Cisco路由器配置静态路由
- 管理学-“三个和尚”
- Google 黑板报: 哀悼与团结的曲线
- 作家天地杂志作家天地杂志社作家天地编辑部2022年第23期目录
- 【R实验.9】主成分和因子分析
- 区块链+人工智能,重新定义世界
- HTML 基础教程:HTML 编辑器
- border渐变 ios_iOS给视图添加渐变色
- 百度地图:创建多个标注点
热门文章
- 推荐两款好用的企业级内网穿透软件
- 18100出多少取整_电子表格里小数取整用什么公式?
- html的table 菜鸟,HTML table 标签 | 菜鸟教程
- Go 语言中的switch分支
- Win系统 - 系统双击文件总弹出属性窗口如何解决?
- 缓存加速-----Squid-访问控制列表日志分析反向代理
- 葫芦书笔记----循环神经网络(RNN)
- (区块链溯源)基于Hyperledger Fabric 区块链的危险化学品溯源
- java foreach循环语句_Javaforeach语句
- 排序算法——冒泡排序(Bubble Sort)