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 @   Frommoon  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示