代码练习11-两两交换链表中的节点

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

C++核心代码

 

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        //创建一个虚拟头节点
        ListNode dummy(0);
        dummy.next = head;
        //prev 指针用于维护当前交换的前一个节点
        ListNode* prev = &dummy;
        //current 指针用于遍历链表
        ListNode* current = head;
        // 遍历链表,交换每一对节点
        while(current && current->next){
            ListNode* first = current;
            ListNode* second = current->next;
            //进行交换
            prev->next = second;
            first->next = second->next;
            second->next = first;
            // 移动指针到下一对节点
            prev= first;
            current = current->next;
        }
        return dummy.next;


    }
};

 

思路解释

  1. 虚拟头节点

    • ListNode dummy(0); 创建一个虚拟头节点 dummy,它简化了对链表头节点的操作。
    • dummy.next = head; 将虚拟头节点的 next 指向实际的头节点。
  2. 指针初始化

    • ListNode* prev = &dummy; prev 指针初始化为虚拟头节点,用于连接交换后的链表部分。
    • ListNode* current = head; current 指针用于遍历链表。
  3. 交换节点

    • ListNode* first = current; 获取当前节点作为 first 节点。
    • ListNode* second = current->next; 获取 first 节点的下一个节点作为 second 节点。
    • prev->next = second;prevnext 指向 second 节点(交换后的新头节点)。
    • first->next = second->next;firstnext 指向 second 的下一个节点。
    • second->next = first;secondnext 指向 first 节点,完成交换。
  4. 更新指针

    • prev = first; 更新 prev 为当前交换对的第一个节点。
    • current = first->next; 更新 current 为下一对节点的第一个节点。
  5. 返回结果

    • return dummy.next; 返回虚拟头节点的 next,即交换后的链表的头节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值