Leetcode24. 两两交换链表中的节点
Leetcode24. 两两交换链表中的节点
题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
1 | 输入:head = [1,2,3,4] |
示例 2:
1 | 输入:head = [] |
示例 3:
1 | 输入:head = [1] |
提示:
- 链表中节点的数目在范围
[0, 100]
内 0 <= Node.val <= 100
解题思路
这道题是关于链表操作的题。思路上比较简单,注意边界条件就好。
具体的方法如下:
如上图所示,需要翻转的两个节点为curNode
和curNode->next
。为了翻转后的节点的链接,还需要标记之前的节点preNode
和之后的节点nextNode
。需要做的翻转操作为:
1 | preNode->next = curNode->next; |
为了方便统一操作,不对头节点进行特殊的判断以及为了方便找到翻转后的头节点,在所有节点之前增加一个新的虚拟头节点virtualHead
。
参考代码
1 | struct ListNode { |
复杂度分析
时间复杂度:,其中 是链表的节点数量
空间复杂度:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 二进制的叮当喵!