leetcode24. 两两交换链表中的节点(思路+解析)

一:题目

在这里插入图片描述

二:思路

思路:
1.分析题意 这是相邻结点进行交换 如果是4个结点 那么1和2交换 3和4交换 如果是3个结点 那么就1和2进行交换 3不动
2.这里我们定义一个虚拟头节点方便操作,我们只需三步实现结点的交换
<1>:让虚拟结点指向第二个结点(进行交换的结点我把其分为第一个结点和第二个结点)
<2>:第二个结点指向第一个结点(这里需要定义一个临时节点 保存第一个结点)
<3>:第一个结点指向第三个结点(这里需要定义一个临时结点 保存第三个结点)
3.将定义的虚拟结点往后移动两个结点开始新的交换

三:上码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        /**
            思路:1.分析题意  这是相邻结点进行交换  如果是4个结点 那么1和2交换  3和4交换
                   如果是3个结点  那么就1和2进行交换 3不动
                2.这里我们定义一个虚拟头节点方便操作,我们只需三步实现结点的交换
                  <1>:让虚拟结点指向第二个结点(进行交换的结点我把其分为第一个结点和第二个结点)
                  <2>:第二个结点指向第一个结点(这里需要定义一个临时节点 保存第一个结点)
                  <3>:第一个结点指向第三个结点(这里需要定义一个临时结点 保存第三个结点)
                3.将定义的虚拟结点往后移动两个结点开始新的交换
        */

        ListNode* node = new ListNode(2);//定义一个虚拟结点
        node->next = head;//虚拟结点和链表连上了
        ListNode* cur;//这里我们定义一个新的结点 方便我们进行交换的操作 从而不影响node和链表的联系
        cur = node;
        while(cur->next != NULL && cur->next->next != NULL){
            
            ListNode *temp = cur->next;//定义一个临时结点 保存指向第一个结点的指针
            ListNode *temp1 = cur->next->next->next;//定义一个临时结点 保存第指向第三个结点的指针

            cur->next = cur->next->next;//第一步 虚拟结点指向第二个结点
            cur->next->next = temp;//第二步  第二个结点指向第一个结点
            cur->next->next->next = temp1;//第三步  此时cur->next 指向第二个结点 cur->next->next 指向的是第一个结点  所以该 cur->next->next->next 指向第三个结点

            //往后跳两个结点
            cur = cur->next->next;
        }

        return node->next;
    }
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天向上的菜鸡杰!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值