C++实现LeetCode(24.成对交换节点)

 更新时间:2021年07月13日 16:09:41   作者:Grandyang  
这篇文章主要介绍了C++实现LeetCode(24.成对交换节点),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

[LeetCode] 24. Swap Nodes in Pairs 成对交换节点

Given a linked list, swap every two adjacent nodes and return its head.

You may not modify the values in the list's nodes, only nodes itself may be changed.

Example:

Given

1->2->3->4

, you should return the list as

2->1->4->3.

这道题不算难,是基本的链表操作题,我们可以分别用递归和迭代来实现。对于迭代实现,还是需要建立 dummy 节点,注意在连接节点的时候,最好画个图,以免把自己搞晕了,参见代码如下:

解法一:

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode *dummy = new ListNode(-1), *pre = dummy;
        dummy->next = head;
        while (pre->next && pre->next->next) {
            ListNode *t = pre->next->next;
            pre->next->next = t->next;
            t->next = pre->next;
            pre->next = t;
            pre = t->next;
        }
        return dummy->next;
    }
};

递归的写法就更简洁了,实际上利用了回溯的思想,递归遍历到链表末尾,然后先交换末尾两个,然后依次往前交换:

解法二:

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

解法三:

class Solution {
    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = head.next;
        head.next = swapPairs(newHead.next);
        newHead.next = head;
        return newHead;
    }
}

到此这篇关于C++实现LeetCode(24.成对交换节点)的文章就介绍到这了,更多相关C++实现成对交换节点内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现LeetCode(98.验证二叉搜索树)

    C++实现LeetCode(98.验证二叉搜索树)

    这篇文章主要介绍了C++实现LeetCode(98.验证二叉搜索树),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言数据结构与算法时间空间复杂度基础实践

    C语言数据结构与算法时间空间复杂度基础实践

    这篇文章主要为大家介绍了C语言数据结构与算法中时间空间复杂度的基础实践,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • 详解C++之函数重载

    详解C++之函数重载

    这篇文章主要介绍了c++函数重载的相关知识,文章讲解的非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C C++ 题解LeetCode2360图中的最长环示例

    C C++ 题解LeetCode2360图中的最长环示例

    这篇文章主要为大家介绍了C C++ 题解LeetCode2360图中的最长环示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • C语言如何正确的终止正在运行的子线程

    C语言如何正确的终止正在运行的子线程

    这篇文章主要介绍了C语言如何正确的终止正在运行的子线程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • C语言类型转换与常量的细节深入理解探究

    C语言类型转换与常量的细节深入理解探究

    这篇文章主要为大家介绍了C 语言类型转换与常量的细节深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • C++实现评教管理系统

    C++实现评教管理系统

    这篇文章主要为大家详细介绍了C++实现评教管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C语言调用Python代码的方法

    C语言调用Python代码的方法

    这篇文章主要介绍了C语言调用Python代码的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C语言中的强符号和弱符号介绍

    C语言中的强符号和弱符号介绍

    这篇文章主要介绍了C语言中的强符号和弱符号介绍,本文用多个实例来讲解强符号和弱符号,需要的朋友可以参考下
    2015-03-03
  • 深入解析C++编程中的静态成员函数

    深入解析C++编程中的静态成员函数

    这篇文章主要介绍了深入解析C++编程中的静态成员函数,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09

最新评论