【leetcode100-30】【链表】两两交换链表节点

【题干】

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

【思路】

  • 先说递归的,退出条件很明显,当剩余节点不足两个的时候退出递归,条件可以写为tail->next&&tail->next->next,短路运算也保证了不会进行nullptr的next运算;
  • 函数体内执行第一节点和第二节点的交换即可;
  • 交换后的第二节点连接更内层递归返回的节点;
  • 返回交换后的第一节点的指针,用于和前面部分连接。
  • 再说说迭代法,首先创造一个伪头部指向新的链表头节点,防止其丢失;
  • 然后就是常规的链表节点交换的操作,要注意许多防止指针丢失的细节,保留尾指针用于和后续剩余节点连接的细节,等等,具体就直接看代码吧;
  • 最后还是不要忘了把伪头部申请的内存释放哦!

【题解】

递归

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if (head == nullptr || head->next == nullptr) {
            return head;
        }
        ListNode* newHead = head->next;
        head->next = swapPairs(newHead->next);
        newHead->next = head;
        return newHead;
    }
};

迭代

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummyHead = new ListNode(0);
        dummyHead->next = head;
        ListNode* temp = dummyHead;
        while (temp->next != nullptr && temp->next->next != nullptr) {
            ListNode* node1 = temp->next;
            ListNode* node2 = temp->next->next;
            temp->next = node2;
            node1->next = node2->next;
            node2->next = node1;
            temp = node1;
        }
        ListNode* ans = dummyHead->next;
        delete dummyHead;
        return ans;
    }
};

相关推荐

  1. leetcode100-30】【交换节点

    2024-01-05 15:22:06       36 阅读
  2. leetcode24. 交换中的节点

    2024-01-05 15:22:06       47 阅读
  3. LeetCode [24] 交换中的节点

    2024-01-05 15:22:06       44 阅读
  4. Leetcode】24. 交换中的节点

    2024-01-05 15:22:06       43 阅读
  5. LeetCode24.交换中的节点

    2024-01-05 15:22:06       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-05 15:22:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-05 15:22:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-05 15:22:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-05 15:22:06       18 阅读

热门阅读

  1. 软考网络工程师考试大纲(2018年最新版)

    2024-01-05 15:22:06       30 阅读
  2. 高速自动驾驶安全停靠功能规范

    2024-01-05 15:22:06       28 阅读
  3. WPF中MVVM使用总结

    2024-01-05 15:22:06       41 阅读
  4. 【WPF.NET开发】WPF中的焦点

    2024-01-05 15:22:06       33 阅读
  5. 面试 Vue 框架八股文十问十答第二期

    2024-01-05 15:22:06       43 阅读
  6. onvif学习记录

    2024-01-05 15:22:06       42 阅读
  7. 测试:抓包工具

    2024-01-05 15:22:06       40 阅读
  8. 【2024.01.02】刷算法07

    2024-01-05 15:22:06       33 阅读