实在找不着BUG在哪了
查看原帖
实在找不着BUG在哪了
1165831
zuilp楼主2024/10/18 21:47

代码如下,z主要是是delete不了,只有把delete注释掉程序才能跑,不然就会在输出完之后卡住并且返回一个很大的负数

#include<bits/stdc++.h>
using namespace std;
struct node{
    int dete;
    node* next;
    };//创建节点
class re{
    node* head;
    int Size=0;
    node* End;
public:
    re(){head=NULL;End=NULL;};
    void push(int x){
        node* ne=new(node);
        ne->dete=x;
        if(Size==0){
        head=ne;End=ne;
        ne->next=head;
        }//如果循环链表为空
        else{
        End->next=ne;
        End=ne;
        ne->next=head;
            }
            Size++;
        }
        ~re(){
            for(int i=0;i<Size-1;i++){
                node* de=head;
                head=head->next;
                delete(de);
            }
            delete(head);
        }
    void print(int x){
            node* use=head;
            while(Size!=0){
                for(int i=0;i<x-1;i++)use=use->next;//因为删除掉use会让指针失效,所以我让kill函数返回删除指针的下一个指针。循环次数也就要减一次
                cout<<use->dete<<' ';
                use=kill(use);
            }
            }
    node* kill(node* k){
        if(k!=head&&k!=End){
        node* i;
        for(i=head;i->next!=k;i=i->next);
        i->next=i->next->next;
        //delete(k);
        Size--;
        return i->next;
        }else if(k==head){
        End->next=head->next;
        head=head->next;
        //delete(k);
        Size--;
       return head;
        }else{
        node* i;
        for(i=head;i->next!=k;i=i->next);
        i->next=i->next->next;
        End=i;
        Size--;
        return head;
        }
    }
    };
int main()
{
int n,m;
re z;
cin>>m>>n;
for(int i=1;i<=m;i++)z.push(i);
z.print(n);
//z.~re();
 }

请忽略我写得一团乱麻的代码,主要是delite函数我用不明白 一开始觉得循环链表很简单,就试试能不能直接封装到类里

2024/10/18 21:47
加载中...