记录Leetcode中的报错问题

目录

  • [1. 关于链表中由head向下遍历问题](#1. 关于链表中由head向下遍历问题)
  • [2 涉及重排链表时,要将重排后的链表最后一个节点与nullptr相连](#2 涉及重排链表时,要将重排后的链表最后一个节点与nullptr相连)
  • [3 for循环定义变量的位置不同](#3 for循环定义变量的位置不同)

1. 关于链表中由head向下遍历问题

  • 如下:
    • 如果我直接使用head=head->next;往下走,就会报错
    • 只有用另一个变量next= head->next; head->next=nullptr;就不会
  • 在释放当前节点之前,先保存下一个节点的指针,以确保不会访问已经被释放的内存
  • 确保不会访问已经被释放的内存
cpp 复制代码
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode* cur1=nullptr;
        ListNode* pre1=nullptr;
        ListNode* cur2=nullptr;
        ListNode* pre2=nullptr;
        ListNode* next=nullptr;

       while(head!=nullptr){
            next=head->next;
            if(head->val < x){
                if(cur1==nullptr){
                    cur1=head;
                   
                }else{
                    pre1->next=head;               
                }
                 pre1=head;
            }else{
                if(pre2==nullptr){
                    cur2=head;
                    // pre2=cur2;
                }else{
                    pre2->next=head;
                
                }
                pre2=head;
            }
            head=next;

       }
       pre1->next=cur2;
       return cur1;
    }
    
};

2 涉及重排链表时,要将重排后的链表最后一个节点与nullptr相连

  • 对于同一个节点重复释放内存或释放后使用

程序执行完毕后,回对内存进行释放,如果不断开最后一个节点,会找到head为头部的链表节点,将head的某节点内存重复释放

cpp 复制代码
class Solution {
public:
    ListNode* help[50000];

    void sortnode(vector<ListNode*>& arr,int l,int r){
        if(l>=r)return ;
        int m=(l+r)/2;
        
        sortnode(arr,l,m);
        sortnode(arr,m+1,r);

        int i=l,a=l,b=m+1;
        while(a<=m&&b<=r ){
            help[i++]= (arr[a]->val <arr[b]->val)? arr[a++]:arr[b++];
        }

        while(a<=m){
            help[i++]=arr[a++];
        }
        while(b<=r){
            help[i++]=arr[b++];
        }
        for (int k = l; k <= r; ++k) arr[k] = help[k];
        
    }
    ListNode* sortList(ListNode* head) {
        if(head==nullptr)return nullptr;
        int n=0;
        ListNode* cur=head;
        vector<ListNode*> arr;
        while(cur!=nullptr){
            n++;
            arr.push_back(cur);
            cur=cur->next;
        }
        if(n==1)return head;
        ListNode* newhead=nullptr;
        sortnode(arr,0,n-1);
        newhead=help[0];
        ListNode* cur1=newhead;
        for(int i=1;i<n;i++){
            
            cur1->next=help[i];
            cur1=cur1->next;
        }
        cur1->next = nullptr;//*************************
        return newhead;
        

        
    }
};

3 for循环定义变量的位置不同

cpp 复制代码
for(int i=0,l=i+1,r=n-1;i<n-2;++i)

上述表示,i从0-n-3

但 l 和 r的值每次都是从1 和 n-1开始,也就是l 和i 值无关了

同时之后每次循环对r 进行也不会进行赋值为n-1

l 和r 初始化仅一次

cpp 复制代码
for(int i=0;i<n-2;++i){
    int l=i+1,r=n-1;
}

上述只要循环一次就会给l 和 r 赋值;

相关推荐
小π军8 分钟前
最大重叠区间数量
数据结构·算法
镜像视界(浙江)科技有限公司18 分钟前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
a187927218311 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记1 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Navigator_Z1 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
wzdark2 小时前
多维数组在算法设计中的存储映射问题4
算法
Phil3233 小时前
多智能体不是越多越好:Google《Towards a Science of Scaling Agent Systems》论文深度解读
算法
6Hzlia3 小时前
【Classic 150 刷题计划】 LeetCode 26. 删除有序数组中的重复项 | C++ 快慢双指针经典模板
c++·算法·leetcode
huang5791473 小时前
基于滑动窗口的流式数据算法优化思路3
算法
Ulyanov4 小时前
AudioVision Pro:基于 PySide6 + sounddevice 的实时音频可视化播放器设计
python·算法·音视频