这是一道 「中等难度」 的题
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余数



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2023-06-19