チェーンテーブルの初期化、削除・変更など


この数日ずっとチェーン時計を見ていて、最初は少しぼんやりしていて、2日見て、それからチェーン時計が実際にとても簡単であることを発見して、主に把握して、どのようにチェーン時計が空であることを判断して、チェーン時計はどのように表示して、削除して操作を調べる時、どのように現在のノードを操作して、メモリの漏れに注意して、以上のいくつかの点を掌握して、チェーン時計は多くないはずで、くだらない話は多く言わないで、直接コードをかき回します.
#include<iostream>
using namespace std;
class Node{
public:
    int data;
    Node *next;
    Node(int x){
        data=x;
        next=NULL;
    }
};//       ,     struct   
class Linklist{
private:
    Node *head;
public:
    void insert(Node *node,int index){
        if(head==NULL){
            head=node;
            return;
        }//        ,true            ,  
        if(index==0){
            node->next=head;
            head=node;
            return;
        }//               ,true               (          ),        
        Node *current=head;//         
        int i=0;
        while(current->next!=NULL && i<index-1){
            current=current->next;
            i++;
        }//    
        if(i==index-1){
            node->next=current->next;
            current->next=node;
        }//              ,      
    }
    void output(){
        if(head==NULL){
            return ;
        }
        Node *current=head;
        while(current!=NULL){
            cout<<current->data<<" ";
            current=current->next;
        }//    
        cout<<endl;
    }
    void deleteNode(int del_index){
        if(head==NULL){
            return;
        }//        
        Node *current=head;
        int i=0;
        if(del_index==0){
            head=head->next;
            delete current;
            return;
        }//             
        while(current->next!=NULL && i<del_index-1){
            current=current->next;
            i++;
        }//  
        if(i==del_index-1){
            Node *del_node=current->next;//            ,  delete current->next?       5     ,
            current->next=current->next->next;//                 
            delete del_node;
        }//      ,      
    }
        void changeNode(int cha_index,int n){
        Node *current=head;
        int i=0;
        while(current->next!=NULL && i<cha_index-1){
            current=current->next;
            i++;
        }
        if(i==cha_index-1){
            current->next->data=n;
        }
    }
    int queryNode(int queIndex){
        Node *current=head;
        int i=0;
        int res;
        while(current->next!=NULL&&i<queIndex-1){
            current=current->next;
            i++;
        }
        if(i==queIndex-1){
            res=current->next->data;
        }
        return res;
    }
};
int main(){
    Linklist l1;
    for(int i=1;i<=10;i++){
        Node *node1=new Node(i);//       
        l1.insert(node1,i-1);//    
    }
    cout<<endl;
    cout<<"l1:"<<endl;
    l1.output();
    //l1.deleteNode(5);
    //l1.changeNode(1,12);
    cout<<l1.queryNode(1)<<endl;
    //l1.output();
    return 0;
}