【路飞】leetcode 24 两两交换链表节点

84 阅读1分钟

解法:头插法(用于交换链表真是太好用了)

思路:

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
};