LeetCode 第 24 号问题:两两交换链表中的节点

本文首发于公众号「五分钟学算法」,是 图解 LeetCode 系列文章之一。
个人网站: https://www.cxyxiaowu.com

题目来源于 LeetCode 上第 24 号问题:两两交换链表中的节点。题目难度为 Medium,目前通过率为 45.8% 。

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

        给定 1->2->3->4, 你应该返回 2->1->4->3.
      

题目解析

该题属于基本的链表操作题。

  • 设置一个虚拟头结点dummyHead
  • 设置需要交换的两个节点分别为node1node2,同时设置node2的下一个节点next

在这一轮操作中

  • node2节点的next设置为node1节点
  • node1节点的next设置为next节点
  • dummyHead节点的next设置为node2
  • 结束本轮操作

接下来的每轮操作都按照上述进行。

动画描述


v2-3c0d02ca7c0a66f048fc736c583c9d63_b.gif


代码实现

        // 24. Swap Nodes in Pairs
// https://leetcode.com/problems/swap-nodes-in-pairs/description/
// 时间复杂度: O(n)
// 空间复杂度: O(1)
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {

        ListNode* dummyHead = new ListNode(0);
        dummyHead->next = head;

        ListNode* p = dummyHead;
        while(p->next && p->next->next){
            ListNode* node1 = p->next;
            ListNode* node2 = node1->next;
            ListNode* next = node2->next;
            node2->next = node1;
            node1->next = next;
            p->next = node2;
            p = node1;
        }

        ListNode* retHead = dummyHead->next;
        delete dummyHead;

        return retHead;
    }
};
      

我的专栏:

和程序员小吴一起学算法


❤️ 看完三件事:

如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个忙:

  1. 点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-
  2. 关注我和专栏,让我们成为长期关系
  3. 关注公众号「五分钟学算法」,第一时间阅读最新的算法文章,公众号后台回复 1024 送你 50 本 算法编程书籍。

v2-7d84a7f4361bd5f8d21b98b9edb0b1b4_b.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值