Day7(链表)

💫没有一蹴而就的改变,只有日复一日的坚持。


学习日期:2025年1月20日22:58:12

学习内容:代码随想录-两两交换链表中的节点

学习时长:1h20min

练习题目
题目描述

24. 两两交换链表中的节点 - 力扣(LeetCode)

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

解题思路
  • 整体思路/注意事项
  1. 奇/偶节点
  2. dummyHead好用
  3. cur指针的指向 :要交换的两个节点的前一个节点

  • 代码实现
  1. 遍历的终止条件:

cur->next!=null偶数;cur->next->next!=null奇数

注:先判断cur->next!=null注意

  1. "节点1"的临时保存:temp1=cur->next关键
  2. "节点3"的临时保存:temp2=cur->next—>next->next关键
  3. 节点的交换
  4. cur的移动:cur=cur->next->next
  5. return dummyHead->next

Bug

错误:dummyHead新建一个节点,应该通过类函数进行初始化定义。new

ListNode* dummyHead=new ListNode(0);

cur/temp不同,dummyHead是一个节点,cur/temp是一个指针 存疑

/**
 * 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) {
        ListNode* dummyHead=new ListNode(0);
 
        dummyHead->next=head;
        ListNode* cur=dummyHead;
        
        while(cur->next!=0&&cur->next->next!=0){
            ListNode* temp1=cur->next;
            ListNode* temp2=cur->next->next->next;

            cur->next=cur->next->next;
            cur->next->next=temp1;
            cur->next->next->next=temp2;//节点1/2的交换

            cur=cur->next->next;//cur指针的移动
        }

        return dummyHead->next;

        
    }
};
学习总结
  1. 节点是否需要临时保存,画图分析,改变cur->next之后,删掉原来的指针,分析时候能找到后面的指针,避免出现空指针错误。注意
  2. new的理解 待完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值