两两交换链表中的节点

题目 - 两两交换链表中的节点

LeetCode 24

难度:简单

分析

递归

  • 从链表的头节点 head 开始递归。
  • 每次递归都负责交换一对节点。由 firstNode 和 secondNode 表示要交换的两个节点。
  • 下一次递归则是传递的是下一对需要交换的节点。若链表中还有节点,则继续递归。
  • 交换了两个节点以后,返回 secondNode,因为它是交换后的新头。
  • 在所有节点交换完成以后,我们返回交换后的头,实际上是原始链表的第二个节点。

代码

func swapPairs(_ head: ListNode?) -> ListNode? {
    if head == nil || head?.next == nil {
        return head
    }
    var fisrt = head
    var second = head?.next
    fisrt?.next = swapPairs(second?.next);
    second?.next = fisrt
    return second
}