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

41 阅读1分钟

题目

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

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

分析

按照要求模拟就行,唯一需要注意的是,当下一个交换不满足两个时需要注意,详见代码注释

fun swapPairs(head: ListNode?): ListNode? {
    var curr = head
    var result = ListNode(0).apply {
        next = head
    }
    var pre = result
    while (curr?.next != null) {
        var next = curr.next!!.next
        pre.next = curr.next
        curr.next!!.next  = curr
        
        //恢复连接,以防止当下一个交换不满足两个时最后一个元素丢失
        curr.next = next

        pre = curr
        curr = next
    }
    return result.next
}

关于我

一个希望友友们能提出建议的代码下毒糕手