24. 两两交换链表中的节点 JavaScript实现

84 阅读1分钟

24. 两两交换链表中的节点

题目链接

一、递归

在这里插入图片描述

var swapPairs = function(head) {
    // 2、递归结束的条件.需要考虑节点数是奇数还是偶数
    if(head == null|| head.next == null){
        return head
    }

    // 两个节点作为一个递归分支,然后将递归分支按照顺序连接起来.
    let newHead = head.next
    // 1、单层递归逻辑
    // 把多个递归分支进行连接
    head.next = swapPairs(newHead.next)
    newHead.next = head
    
    return newHead
};

二、迭代

在这里插入图片描述 在这里插入图片描述

var swapPairs = function(head) {
    let dummyNode = new ListNode(-1,head)
    let temp = dummyNode

    // 每次将temp后面的两个节点进行反转
    while(temp.next && temp.next.next){
        let node1 = temp.next, node2 = temp.next.next;

        // 进行反转
        temp.next = node2
        node1.next = node2.next
        node2.next = node1

        // 只需移动temp指针
        temp = node1
    }
    return dummyNode.next
};