leetcode - 链表两两元素交换 + 判断链表有无环
链表两两元素交换
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
/**
* 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
* <b>你不能只是单纯的改变节点内部的值</b>,而是需要实际的进行节点交换。
* 解题除了使用递归, 另一种思路就是保证在替换的过程中, 节点不会丢失
* @param head
* @return
*/
public static ListNode swapPairs(ListNode head) {
if(head == null) {
return null;
}
ListNode result = new ListNode(0);
result.next = head;
ListNode cur = result;
while(cur.next != null && cur.next.next != null) {
// 第一个节点
ListNode temp = cur.next;
// 第二个节点
ListNode pre = temp.next;
// 当前节点的下个节点是第二个节点
cur.next = pre;
// 第一个节点的下个节点是第三个节点
temp.next = pre.next;
// 第二个节点的下个节点是第一个节点
pre.next = temp;
// 当前节点等于第一个节点
cur = temp;
}
return result.next;
}
环形链表
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
```
/**
* 给定一个链表,判断链表中是否有环。
* 1. 龟兔赛跑的方式, 一个一次走两步, 一个一次走一步, 如果相遇说明有环, 否则直到null说明无环
* 2. 使用set存储数据, 之后遍历, 查找有无相同的节点
* 两种方案的时间复杂度都是O(n), 空间复杂度第一种会好点
*
* 执行用时 :1 ms, 在所有 java 提交中击败了78.04%的用户
* 内存消耗 :37 MB, 在所有 java 提交中击败了97.08%的用户
* @param head
* @return
*/
public static boolean hasCycle(ListNode head) {
if(head == null) {
return false;
}
ListNode fast = head;
ListNode low = head;
while(fast != null && low != null && fast.next != null) {
fast = fast.next.next;
low = low.next;
if(fast != null && fast.equals(low)) {
return true;
}
}
return false;
} /**
* 执行用时 :6 ms, 在所有 java 提交中击败了25.71%的用户
* 内存消耗 :38 MB, 在所有 java 提交中击败了94.68%的用户
* @param head
* @return
*/
public static boolean hasCycle1(ListNode head) {
if(head == null) {
return false;
}
Set set = new HashSet<ListNode>();
while(head.next != null) {
set.add(head);
head = head.next;
if(set.contains(head)) {
return true;
}
}
return false;
}
leetcode - 链表两两元素交换 + 判断链表有无环的更多相关文章
- 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述
关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...
- 数据结构与算法——链表 Linked List(单链表、双向链表、单向环形链表-Josephu 问题)
链表是有序的列表,但是在内存中存储图下图所示 链表是以 节点 的方式来存储,是 链式存储 每个节点包含 data 域.next 域,指向下一个节点 链表的各个节点 不一定是连续存储,如上图所示 链表还 ...
- js 实现数组元素交换位置
/** * 数组元素交换位置 * @param {array} arr 数组 * @param {number} index1 添加项目的位置 * @param {number} index2 删除项 ...
- 【LeetCode】Swap Nodes in Pairs(两两交换链表中的节点)
这是LeetCode里的第24题. 题目要求: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定1->2->3->4, 你应该返回2->1->4- ...
- 【LeetCode题解】24_两两交换链表中的节点(Swap-Nodes-in-Pairs)
目录 描述 解法一:迭代 思路 Java 实现 Python 实现 复杂度分析 解法二:递归(不满足空间复杂度要求) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解 ...
- 24. 两两交换链表中的节点 leetcode
题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 ...
- LeetCode - 24、两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2-> ...
- Leetcode 24题 两两交换链表中的节点(Swap Nodes in Pairs))Java语言求解
题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4,你应该返回 ...
- Java实现 LeetCode 24 两两交换链表中的节点
24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...
随机推荐
- 8.JavaCC官方入门指南-例3
例3:计算器-double类型加法 下面我们对上个例子的代码进行进一步的修改,使得代码具有简单的四则运算的功能. 第一步修改,我们将打印出每一行的值,使得计算器更具交互性.一开始,我们只是把数 ...
- dockerfile和资源限制(五)
镜像生成途径 dockerfile 基于容器制作 什么是dockerfile dockerfile说白就是用来构建docker 镜像的源码,大家看到源码俩字不用惊慌,所为的dockerfile源码只是 ...
- Lnmp架构部署动态网站环境.2019-7-3-1.4
安装wiki开源产品 一.创建数据库 [root@Lnmp bbs]# mysql -uroot -p123456 mysql> create database wiki; #创建wiki数据库 ...
- Linxu:磁盘分区
了解磁盘分区 磁盘的物理组成: 圆形的磁盘盘(主要记录数据的部分): 机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据): 主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据. ...
- XGBoost、LightGBM参数讲解及实战
本文链接:https://blog.csdn.net/linxid/article/details/80785131XGBoost一.API详解xgboost.XGBClassifier1.1 参数1 ...
- Ubuntu环境下打开Firefox报错: Firefox is already running, but is not responding.
在ubuntu下启动firefox可能会报错 Firefox is already running, but is not responding. To open a new window, you ...
- 微信小程序之结构目录、视图层、双线程模型、生命周期、事件传递冒泡、组件、request、登录授权及支付
结构目录与配置介绍 视图层与基础语法 双线程模型 生命周期 事件.传递和冒泡 组件.自定义组件.组件事件传递页面 Request.路由跳转.本地存储 登录(后端实现) | 授权(后端实现) 支付(后端 ...
- 微信小程序云开发-从0打造云音乐全栈小程序
第1章 首门小程序“云开发”课程,你值得学习本章主要介绍什么是小程序云开发以及学习云开发的重要性,并介绍项目的整体架构,真机演示项目功能,详细介绍整体课程安排.课程适用人群以及需要掌握的前置知识.通过 ...
- git 关联vs code
{ "window.zoomLevel": 1, "editor.fontSize": 15, "gitlens.advanc ...
- POJ3662Telephone Lines(最短路+二分)
传送门 题目大意:n个点p条边,每条边有权值,让1和n点联通,可以将联通1--n的边选k条免费, 求剩下边权的最大值. 题解:二分一个答案x,大于x的边权设为1,小于等于x的边权设为0,跑最短路. 若 ...