❝
这是一道 「中等难度」 的题
https://leetcode.cn/problems/swap-nodes-in-pairs/❞
题目
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:

/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
protect := &ListNode{0, head}
tail := protect
// 当后面至少还有两个节点的时候,需要继续迭代
for tail.Next != nil && tail.Next.Next != nil {
// 交换
// 上一组的末尾 --> 本组的第二个节点
// 本组的第二个节点--> 本组的开头
head = tail.Next
secondNode := head.Next
nextHead := secondNode.Next
tail.Next = head.Next
head.Next.Next = head
head.Next = nextHead
tail = head;
}
return protect.Next
}
复杂度分析
-
「时间复杂度」:, 为节点个数。每次迭代时间复杂度为, 为偶数时需要迭代 次, 为奇数时需要迭代 次,忽略常数后时间复杂度计作。 -
「空间复杂度」:。常数级空间复杂度,只开辟了固定个数的几个变量。
- End -
早上送芒果上学,天空飘着毛毛细雨。芒果有感而发:“爸爸,我也是从天上下下来的,爸爸从里面选了一个最好看的带回家就变成小芒果啦”。哈哈,愉快的一天。
本篇文章来源于微信公众号: i余数
微信扫描下方的二维码阅读本文

Comments NOTHING