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

题目

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

法一、迭代

var swapPairs = function(head) {
    let dummy = {next:head}
    let p1 = dummy
    while(p1.next && p1.next.next){
        let p2 = p1.next
        let p3 = p2.next
        
        //交换p2和p3
        p1.next = p3
        p2.next = p3.next
        p3.next = p2

        //移动指针
        p1 = p2
    }
    return dummy.next
};

法二、递归

var swapPairs = function(head) {
    // 基本情况:如果链表为空或只有一个节点,直接返回头节点
    if (!head || !head.next) {
        return head;
    }
    
    // 记住前两个节点
    let first = head;
    let second = head.next;

    // 递归交换后续节点,并将结果连接到当前交换的节点上
    first.next = swapPairs(second.next);
    second.next = first;

    // 返回新的头节点(第二个节点)
    return second;
};
  • 比较难理解,

posted @ 2025-01-04 13:26  Frommoon  阅读(11)  评论(0)    收藏  举报