解法:头插法(用于交换链表真是太好用了)
思路:
1、涉及到头节点会被改变的,创建一个虚拟头节点是一个很不错的方式,让他指向head,最后用于返回。
2、创建前一个节点,每次作为头插法的参照物,当一轮循环完成以后,指向下一轮循环的前一个节点
3、创建当前节点,用于遍历链表,循环完后指向下次循环的起始位置
时间复杂度:O(n),空间复杂度O(1)
var swapPairs = function(head) {
let virDom = new ListNode(-1)
virDom.next = head
let prev = virDom
let cur = virDom.next
while (cur && cur.next) {
let next = cur.next
cur.next = next.next
next.next = prev.next
prev.next = next
prev = prev.next.next
cur = cur.next
}
return virDom.next
};