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. };
目录
相关文章
|
23天前
|
分布式计算 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 若是设置参数该如何设置
|
23天前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
29 1
|
2月前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
25 3
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
77 4
|
1月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
18 0
LeetCode第二十四题(两两交换链表中的节点)
|
1月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
62 1
|
3月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
04_两两交换链表中的节点
04_两两交换链表中的节点
|
3月前
|
存储 Java
下一篇
无影云桌面