leetcode24-两两交换链表中节点--Java解法

简介: leetcode24-两两交换链表中节点--Java解法

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

输入:head = [1,2,3,4]

输出:[2,1,4,3]

示例 2:

输入:head = []

输出:[]

示例 3:

输入:head = [1]

输出:[1]

 

提示:

链表中节点的数目在范围 [0, 100] 内

0 <= Node.val <= 100

 

解法:

通过设置奇偶标志对链表进行交换操作

根据题意,我们发现当链表走到奇数点时,节点与后面的节点进行交换,然后去往下一位;当走到偶数点时,不进行交换,直接走到下一位。通过设置一个标志,标记当前的节点的奇偶性,我们就可以对链表进行交换操作了。

注意一点,我们一开始设置p为头节点,只有当p和p->next != null时才可以进入while循环,二者缺一不可。且我们的循环条件为p->next != null,是为了应对链表整体为奇数的情况,链表走到最后,使得p->next不等于null,避免p和下一位不存在的节点进行交换,出现bug。

时时间复杂度o(n)

空间复杂度为o(1)

代码:

1. 
2. class Solution {
3. public:
4.     int cnt = 1,temp;
5.     ListNode* swapPairs(ListNode* head) {
6.         ListNode* p = new ListNode;
7.         p = head;
8. if(p == nullptr) return head;
9. if(!p->next) return head;
10.         while(p->next)
11.         {
12. if(cnt % 2 == 1){
13.                 temp = p->val;
14.                 p->val = p->next->val;
15.                 p->next->val = temp;
16.                 p = p->next;
17.                 cnt++;
18.             }
19. else{
20.                 p = p->next;
21.                 cnt++;
22.             }
23.         }
24. 
25. return head;
26.     }
27. };
目录
相关文章
|
2月前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
37 6
|
2月前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
3月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
100 4
|
3月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
30 0
LeetCode第二十四题(两两交换链表中的节点)
|
3月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
76 1
|
5月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
04_两两交换链表中的节点
04_两两交换链表中的节点
|
5月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
56 1
|
5月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
73 1
|
5月前
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
133 0