关于leetcode两两交换节点的问题

发布于 2022-09-12 04:51:54 字数 838 浏览 17 评论 0

var swapPairs = function(head) {
    if(head == null || head.next == null){
        return head;
    }
    // 获得第 2 个节点
    let next = head.next;
    // next.next = head.next.next
    // 第1个节点指向第 3 个节点,并从第3个节点开始递归
    head.next = swapPairs(next.next);
    // 第2个节点指向第 1 个节点
    next.next = head;
    // 或者 [head.next,next.next] = [swapPairs(next.next),head]
    return next;
};

作者:Alexer-660
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/24-liang-liang-jiao-huan-lian-biao-zhong-de-jie--7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 // 第1个节点指向第 3 个节点,并从第3个节点开始递归
    head.next = swapPairs(next.next);

其中这一行看不明白,这里的第3个节点是head.next还是next.next啊。。

 // 第2个节点指向第 1 个节点
    next.next = head;

而且这边的next.next是第二个节点吧。。怎么和上面的next.next对不上啊

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故人爱我别走 2022-09-19 04:51:54

从结果往上看比较好理解:

首先交换两个结点,那么返回的就是后面结点
所以返回next没有问题

然后要把前面的结点接到后面的结点
所以

next.next = head;

最后,再拼接上 后面结果的交换结果

 head.next = swapPairs(next.next);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文