Swap Nodes In Pairs

两两交换链表的节点

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

输入:1 -> 2 -> 3 -> 4
输出:2 -> 1 -> 4 -> 3

解法

方法一:递归

  • 时间复杂度:O(n)

  • 空间复杂度:O(n)

func swapPairs(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    first := head
    second := head.Next

    first.Next = swapPairs(second.Next)
    second.Next = first
    return second
}

方法二:迭代

  • 时间复杂度:O(n)

  • 空间复杂度:O(1)

func swapPairs(head *ListNode) *ListNode {
    dummy := &ListNode{Next: head}
    tmp := dummy

    for tmp.Next != nil && tmp.Next.Next != nil {
        first := tmp.Next
        second := first.Next

        first.Next = second.Next
        second.Next = first
        tmp.Next = second

        tmp = first
    }

    return dummy.Next
}

Last updated

Was this helpful?