Medium
Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list’s nodes (i.e., only nodes themselves may be changed.)
Example 1:
Input: head = [1,2,3,4]
Output: [2,1,4,3]
Example 2:
Input: head = []
Output: []
Example 3:
Input: head = [1]
Output: [1]
Constraints:
[0, 100]
.0 <= Node.val <= 100
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
const swapPairs = function (head) {
if (head === null) {
return null
}
const getLength = (node) => {
let count = 0
while (node !== null) {
count++
node = node.next
}
return count
};
const reverse = (node, length) => {
if (length < 2) {
return node
}
let current = node
let prev = null
let next
for (let i = 0; i < 2; i++) {
next = current.next
current.next = prev
prev = current
current = next
}
node.next = reverse(current, length - 2)
return prev
};
const len = getLength(head)
return reverse(head, len)
};
export { swapPairs }