LeeCode 24. 两两交换链表中的节点

214 阅读1分钟

解题思路

交换链表中相邻节点的值,我们先从中间入手,有前 pre 有后 next,将当前节点设为 temp,那将 temptemp.next 进行交换,即为将 pre 指向 temp.next,再将 temp.next.next 指向 next,再将 temp.next 指向 temp,即完成交换。如下图所示。 image.png

然后我们再将前面没有 pre 的部分处理好,如下图所示。

代码

class Solution {
    func swapPairs(_ head: ListNode?) -> ListNode? {
        var temp = head
        var h: ListNode? = head
        var pre: ListNode? = nil
        while temp != nil && temp?.next != nil {
            let tempN = temp?.next?.next
            if pre != nil {
                pre?.next = temp?.next
                temp?.next?.next = temp
                pre = temp
                temp?.next = tempN
                temp = tempN
            } else {
                h = temp?.next
                pre = temp
                h?.next = temp
                temp?.next = tempN
                temp = tempN
            }
        }
        return h
    }
}