题目 - 两两交换链表中的节点
难度:简单
分析
递归
- 从链表的头节点 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
}