链表-中等:两两交换链表中的节点

190 阅读1分钟
  • 题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

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

示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:
输入:head = []
输出:[]

示例 3:
输入:head = [1]
输出:[1]
  • 思路:前哨节点 + 双指针。
  • 代码
class Solution {
    func swapPairs(_ head: ListNode?) -> ListNode? {
        let dummyHead = ListNode(0)
        dummyHead.next = head
        
        var temp: ListNode? = dummyHead
        while temp?.next != nil && temp?.next?.next != nil {
            let node1 = temp?.next
            let node2 = temp?.next?.next
            temp?.next = node2
            node1?.next = node2?.next
            node2?.next = node1
            temp = node1
        }
        
        return dummyHead.next
    }
}