千家信息网

C++如何实现成对交换节点

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要讲解了"C++如何实现成对交换节点",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++如何实现成对交换节点"吧!Swap Nodes in
千家信息网最后更新 2025年12月03日C++如何实现成对交换节点

这篇文章主要讲解了"C++如何实现成对交换节点",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++如何实现成对交换节点"吧!

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++如何实现成对交换节点"的内容了,经过本文的学习后,相信大家对C++如何实现成对交换节点这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0