题解 | #复数集合#链表做法

复数集合

http://www.nowcoder.com/practice/abdd24fa839c414a9b83aa9c4ecd05cc

using namespace std;

struct virtual_num{
    int real_model;
    int virtual_model;
    double model;
    virtual_num* next;
    virtual_num(int r,int v):real_model(r),virtual_model(v),model(pow((pow(r,2) + pow(v,2)),0.5)),next(NULL){};
};

int LinkedListSize(virtual_num* root){
    /*
     * 输出以root为头结点的链表的size。
     */
    int nodeNum = 0;
    while(root->next!=NULL){
        nodeNum++;
        root = root->next;
    }
    return nodeNum;
}

int main() {
    int num;
    while(cin>>num){
        virtual_num* root = new virtual_num(-1,-1);   //链表根节点
        virtual_num* tmp = root;
        virtual_num* addNode;
        string choice;
        int real_num,virtual_num;

        for(int i=0;i<num;i++){
            tmp = root;
            cin>>choice;
            if(choice == "Pop"){
                if(LinkedListSize(root) == 0){
                    cout<<"empty"<<endl;
                }else{
                    cout<<root->next->real_model<<"+i"<<root->next->virtual_model<<endl;
                    root->next = root->next->next;
                    cout<<"SIZE = "<<LinkedListSize(root)<<endl;
                }
            }else if(choice == "Insert"){
                cin>>real_num;
                getchar();
                getchar();
                cin>>virtual_num;
                while(true){
                    if(tmp->next == NULL){  //链表长度为0,直接添加
                        tmp->next = new struct virtual_num(real_num,virtual_num);
                        break;
                    }else{
                        if(tmp->next->model>pow((pow(real_num,2) + pow(virtual_num,2)),0.5)){
                            tmp = tmp->next;
                        }else if(tmp->next->model == pow((pow(real_num,2)+ pow(virtual_num,2)),0.5)){
                            //插入
                            addNode = new struct virtual_num(real_num, virtual_num);
                            addNode->next = tmp->next;
                            tmp->next = addNode;
                            if(addNode->next->virtual_model < addNode->virtual_model){
                                addNode->virtual_model = addNode->next->virtual_model;
                                addNode->next->virtual_model = virtual_num;
                                addNode->real_model = addNode->next->real_model;
                                addNode->next->real_model = real_num;
                            }
                            break;
                        }else{
                            addNode = new struct virtual_num(real_num, virtual_num);
                            addNode->next = tmp->next;
                            tmp->next = addNode;
                            break;
                        }
                    }
                }
                cout<<"SIZE = "<<LinkedListSize(root)<<endl;
            }
        }
        root = NULL;
    }
    return 0;
}
全部评论

相关推荐

正在干活结果人事过来找我,说我被裁了,还说要裁一半,一些没转正的先踢出去…&nbsp;真是牛逼现在的公司,怪不得越做越小。上个月初提交的转正申请,我老大也同意了,我真以为我转正了,结果人事跟我说我老大不知道这些,好吧那你们瞒着呗真是逆天…&nbsp;又要开始找工作了,现在工作哪里这么好找,还有这么多公司喜欢这种操作,坑我们应届生真服了👿
CoderEcho:看你的主页,你好像是有点内向,不怎么说话?我之前实习也是这样的,hr和主管也是用我太内向导致的主管看不到头,工作习惯不好,不适合他们这样的原因把我实习劝退,但是公司肯定有公司的问题,因为去年没一个实习转正的,连社招生都劝退。倒也不是替公司说话,只是一些建议,公司内部裁员肯定是公司的问题,只是积极主动(或者领导眼中积极主动)的人未来一定会有更多机会,刚被劝退的时候基本上秋招已经结束,但是1月份的时候还是上岸啦,并且面试时我说出了我对积极主动的理解也是加分的一点。祝你继续加油往前走,大厂经历+985学历,结果一定不会差的啦
点赞 评论 收藏
分享
2024-12-18 14:13
蚌埠坦克学院 golang
苏州科技大学:面试官:接个面试,对面同学是个杀软二次元
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务