24.两两交换链表中的节点:粗暴易懂的方法(几个临时变量)
【LetMeFly】24.两两交换链表中的节点:粗暴易懂的方法(几个临时变量)
力扣题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]
示例 2:
输入:head = [] 输出:[]
示例 3:
输入:head = [1] 输出:[1]
提示:
- 链表中节点的数目在范围
[0, 100]
内 0 <= Node.val <= 100
方法一:粗暴易懂的方法(几个临时变量)
遇到链表的题不用怕,可以先用几个临时变量将需要记录的节点记录下来,之后随意更改要重新指向的next。
1 |
|
对于本题,我们可以使用4个临时变量:
p
指向已经处理过的部分的最后一个节点(0)first
指向待处理的第一个节点(1)second
指向待处理的第二个节点(2)third
指向还未处理到的第一个节点(4,可能为空)
由于需要进行如下更改:
1 |
|
所以只需要:
p->next = second
first->next = third
second->next = first
这样,原本的1 -> 2
就处理完毕了,下一个待处理节点变成3 -> ...
,第一个未处理的节点变成了1
所以只需p = first
即可。
细节处理:
我们可以添加一个临时的头节点,代表“已处理部分的最后一个节点”,最终返回临时头节点的next即可。
- 时间复杂度$O(len(list))$
- 空间复杂度$O(1)$
AC代码
C++
1 |
|
Python
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/132128294
24.两两交换链表中的节点:粗暴易懂的方法(几个临时变量)
https://blog.letmefly.xyz/2023/08/06/LeetCode 0024.两两交换链表中的节点/