Сложность: medium
Учитывая связанный список, поменяйте местами каждые два соседних узла и верните его голову. Вы должны решить проблему, не изменяя значения в узлах списка (т. е. изменять можно только сами узлы).
Пример:
Input: head = [1,2,3,4]
Output: [2,1,4,3]
👨💻Алгоритм:
1⃣Используем фиктивный узел (dummy), чтобы упростить обработку головы списка.
2⃣Перебираем список парами, меняя местами два соседних узла, корректируя ссылки.
3⃣Продвигаемся дальше на два узла и повторяем процесс до конца списка.
😎Решение:
class ListNode {
var val: Int
var next: ListNode?
init(_ val: Int) {
self.val = val
self.next = nil
}
}
func swapPairs(_ head: ListNode?) -> ListNode? {
let dummy = ListNode(0)
dummy.next = head
var current: ListNode? = dummy
while current?.next != nil && current?.next?.next != nil {
let first = current?.next
let second = current?.next?.next
first?.next = second?.next
second?.next = first
current?.next = second
current = first
}
return dummy.next
}Ставь 👍 и забирай 📚 Базу знаний