/**
* @param {ListNode} head
* @return {ListNode}
*/
const { ListNode, arrToLL, LLToArr } = require('./utils.js')
var swapPairs = function (head) {
if (!head || !head.next) return head
let node1 = head,
node2 = head.next,
newHead = node2,
prev,
rest
while (node2) {
rest = node2.next
node2.next = node1
node1.next = rest
if (prev) prev.next = node2
prev = node1
node1 = rest
if (!node1) return newHead
node2 = node1.next
}
return newHead
}
//Test cases
console.log(LLToArr(swapPairs(arrToLL([1, 2, 3, 4, 5]))))
console.log(LLToArr(swapPairs(arrToLL([1, 2, 3, 4]))))
console.log(LLToArr(swapPairs(arrToLL([1, 2, 3]))))
console.log(LLToArr(swapPairs(arrToLL([1, 2]))))
console.log(LLToArr(swapPairs(arrToLL([1]))))
console.log(LLToArr(swapPairs(arrToLL([]))))