算法挑战4

4 阅读1分钟

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

这道题是leecode hot100的第24题

难度: 中等

题目: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

思路分析: 维持一个前置节点prev, 通过交换它后面两个节点来实现

题解语言: js

题解

var swapPairs = function(head) {
    const dummy = new ListNode(-1);
    dummy.next = head;

    let prev = dummy;

    while(prev.next !== null && prev.next.next !== null){
        let fast = prev.next.next;
        let slow = prev.next;

        slow.next = fast.next;
        fast.next = slow;
        prev.next = fast;

        prev = slow;
        
    }

    return dummy.next;

};

两两交换必须 3 个指针

  1. prev:当前要交换的两个节点前面的节点

  2. a:第一个节点

  3. b:第二个节点