可以补充c++单链表剩下的内容吗

没学过c++,可以帮忙补充一下实现单链表基本操作剩下的程序吗

#include <iostream.h>

//定义线性表类型List
template <class T> 
class List  {
    void clear();                              
    bool isEmpty();                            
    bool insert(const int p, const T value);
    bool delete1(const int p);
    bool getPos(int &p, const T value);
    bool getValue(const int p, T& value);                 
    bool setValue(const int p, const T value);    
};

//定义单链表结点类型
template <class T> 
class Link{
public:
    T data;
    Link<T> *next;
};

//定义单链表类型lnkList
template <class T>
class lnkList : public List<T>{
private:
    Link<T> *head, *tail;                //头指针、尾指针
    
    //返回单链表第p个元素的地址(p=-1返回头结点地址,0返回第1结点地址,不存在返回NULL)
    Link<T> *setPos(const int p){        
        if(p == -1) return head;        //p为-1则返回头结点地址
        int count=0;
        Link<T> *tmp=head->next;            //c指向第1个结点   head->头结点   c->第1结点
        while(tmp != NULL && count<p){    //head->头结点->第1结点->c第2结点->第3结点NULL 
            count++;                    
            tmp=tmp->next;                    //c指向下一结点(指针传递技术)            
        }
        return c;                        
    }
                                        //c指向尾结点的条件:c->next==NULL
                                        //c指向倒数第二个结点的条件: c->next->next==NULL
public:
    //构造函数:构造一个只有头结点的空链表
    lnkList(){                        
        head=tail=new Link<T>;            
        head->next=NULL;
    }
    //析构函数:删除所有结点
    ~lnkList(){                        
        Link<T> *tmp;
        while(head!=NULL){
            tmp=head;                //tmp指向头结点
            head=head->next;        //head指向下一结点
            delete tmp;                //释放头结点
        }
    }
    //2.显示
    bool display(){
        Link<T> *tmp=head->next;    //tmp指向第1结点
        if(tmp==NULL) cout<<"空表\n";
        else{
            while(tmp!=NULL) {
                cout<<tmp->data<<"  ";
                tmp=tmp->next;        //tmp指向下一结点
            }
            cout<<endl;
        }
        return true;
    }
    //3.求表长
    bool length(int& i){
        i=0;
        Link<T> *p=head->next;    //p指向第1结点
        while(p!=NULL){
            i++;
            p=p->next;
        }
        return true;
    }

    //5.追加
    bool append(const T value){
        Link<T> *p, *q;
        q = new Link<T>;    //q指向新结点
        q->data=value;        //填入新结点的数据域
        q->next=NULL;        //填入新结点的指针域NULL
        p=tail;                //p指向尾结点,也可以p=head->next; while(p->next!=NULL) p=p->next;
        p->next=q;            //新结点链入原尾结点之后
        tail=q;                //修改尾指针
        return true;
    }
                            //尾结点的条件p->next == NULL,头结点的条件p == head
                            //第1结点的条件p == head->next,单链表结束的条件 p == NULL
  
};
    

void main()
{
    lnkList<int> LL;
    int choice, p, value;
    bool ok;
    do {
        cout<<"单链表程序(0退出,1清除,2显示,3表长,4插入,5追加,6删除,7查找,8修改,9定位),请选择:";
        cin>>choice; 
        switch (choice) {
            case 0:
                cout<<"再见!\n";
                break;
            case 1:
                break;
            case 2:
                ok=LL.display();
                if(ok==true) cout<<"显示操作成功!\n";
                else cout<<"显示操作失败!\n";
                break;
            case 3:
                ok=LL.length(p);
                if(ok==true) cout<<"求表长操作成功!表长为:"<<p<<endl;
                else cout<<"求表长操作失败!\n";
                break;
            case 4:
                break;
            case 5:
                cout<<"请输入元素值:"; cin>>value;
                ok=LL.append(value);
                if(ok==true) cout<<"追加操作成功!\n";
                else cout<<"追加操作失败!\n";
                break;
            case 6:
                break;
            case 7:
                break;
            case 8:
                break;
            case 9:
                break;
            default: 
                cout<<"选择错误!\n";
        }
    } while (choice != 0);
}


数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633