zoukankan      html  css  js  c++  java
  • LC 1206. Design Skiplist

    link

    class Skiplist {
    public:
        struct Node{
            int key;
            Node* down;
            Node* next;
            Node(int k, Node* d, Node *n){
                key=k;
                down=d;
                next=n;
            }
        };
        Node* head;
        Skiplist() {
            head=new Node(-1,NULL,NULL);
        }
        
        bool search(int target) {
            Node* p=head;
            while(p){
                Node* ne=p->next;
                while(ne!=NULL && ne->key<target){
                    p=p->next;
                    ne=ne->next;
                }
                if(ne!=NULL && target==ne->key) return true;
                p=p->down;
            }
            return false;
        }
        
        void add(int num) {
            vector<Node*> nodes;
            Node* p=head;
            Node* downNode=NULL;
            while(p){
                Node* ne=p->next;
                while(ne!=NULL && num>ne->key){
                    p=p->next;
                    ne=ne->next;
                }
                nodes.push_back(p);
                p=p->down;
            }
            for(int i=nodes.size()-1;i>=0;--i){
                auto cur=nodes[i];
                Node* newNode=new Node(num,downNode,NULL);
                newNode->next=cur->next;
                cur->next=newNode;
                downNode=newNode;
                bool up=((rand()&1)==0);
                if(!up) break;
                if(i==0){
                    Node* newLayerNode=new Node(num,downNode,NULL);
                    head=new Node(-1,head,newLayerNode);
                }
            }
        }
        
        bool erase(int num) {
            bool flag=false;
            Node* p=head;
            while(p){
                Node* ne=p->next;
                while(ne!=NULL && num>ne->key){
                    p=p->next;
                    ne=ne->next;
                }
                if(ne!=NULL && num==ne->key){
                    p->next=p->next->next;
                    flag=true;
                }
                p=p->down;
            }
            return flag;
        }
    };
    
    /**
     * Your Skiplist object will be instantiated and called as such:
     * Skiplist* obj = new Skiplist();
     * bool param_1 = obj->search(target);
     * obj->add(num);
     * bool param_3 = obj->erase(num);
     */
  • 相关阅读:
    MYSQL查询表信息
    认识WCF
    asp.net mvc 模型验证注解,表单提交
    asp.net mvc 防止开放重定向
    asp.net webForm登录授权
    C# 压缩文件与字节互转
    C#将字节流加密解密
    获取数据库表详细信息、存储过程、视图、的sql
    Mvc4学习笔记一(Ajax.ActionLink)
    java开发之提高java和mysql代码性能和质量
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/12436769.html
Copyright © 2011-2022 走看看