单链表指定节点删除,可以若判断出给定结点是最后一个结点,可以通过直接释放最后一个结点的方式删除吗(语言-c++)

单链表指定节点删除,可以若判断出给定结点是最后一个结点,可以通过直接释放最后一个结点的方式删除吗?

还需要把倒数第二个节点的next设置为null

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7434906
  • 这篇博客你也可以参考下:数据结构和算法学习笔记:关于用纯C语言实现线性表链式实现时打印链表中元素无法打印的问题的原理以及用“指向指针的指针”解决,和用C++语言“引用&”作函数参数更加简洁好理解的解决方案。
  • 除此之外, 这篇博客: 快速排序C++实现中的 快速排序是对冒泡排序的一种改进,冒泡排序一次只能移动一次,而快速排序一次就能将大于轴值的数移动到轴值的后面(升序),减少了移动的次数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<iostream>
    using namespace std;
    int oneSort(int a[],int x,int y);  //一次划分函数
    void qSort(int a[],int,int);   //快速排序函数
    int main(){
        int a[]={3,6,5,9,7,1,8,2,4};
        //int a[]={1,2,3,4,5,6,7,8,9};
        int n=sizeof(a)/sizeof(int);
        qSort(a,0,n-1);
        for(int i=0;i<n;i++)
            cout<<a[i]<<" ";
        cout<<endl;
        return 0;
    }
    int oneSort(int a[],int x,int y){
        int i=x;  //i从左往右走
        int j=y;  //j从右往左走
        int tmp=a[x];   //把第一个数当轴值,保存到tmp中
        while(i<j){  //当i<j时,循环
            while(tmp<a[j]&&i<j) //如果右边的值比轴值大就循环
                   j--;
            if(i<j){    
                a[i]=a[j];  //此时tmp>a[j],将a[j]的值赋值给a[i],然后i++
                i++;
            }
            while(a[i]<tmp&&i<j) //如果左边的值比轴值小就循环
                i++;
            if(i<j){
                a[j]=a[i];  //此时tmp<a[i],将a[i]的值赋值给
                            //a[j],然后j--
                j--;
            }
        }
        a[i]=tmp; //最后i,j的位置的值就是轴值所在的值tmp,此时,
                    //i左边的值都比tmp小,i右边的值都比tmp大,
                    //完成一次划分
        return i; //返回i的位置,然后对i左边和右边递归进行划分
    }
    void qSort(int a[],int x,int y){
        if(x<y){
            int k=oneSort(a,x,y); //取得一次划分的轴值,再对轴
                            //值左右边进行递归划分
            qSort(a,x,k-1);
            qSort(a,k+1,y);
        }
    }
  • 您还可以看一下 李老师老师的C语言版数据结构入门课程中的 数据结构入门简介小节, 巩固相关知识点