• c++实现单链表及常用方法实现


    来自https://blog.csdn.net/h294455907/article/details/80223345
    这篇博客,做了一点小改动,用一个cpp实现的
    #include<iostream>
    using namespace std;
    
    class ListNode {
    public :
        int data;
        ListNode *next;
    };
    
    class List {
    public:
        List();
        ~List();
        void CreateList();
        void Insert(int data,int index,bool flag = true);
        void Delete(int index);
        void printList();
        void getData(int index);
        int getLength();
    private:
        ListNode *head;
    };
    
    List::List() {
        head = new ListNode();
        head->next = NULL;
        cout<<"创建对象成功"<<endl;
    }
    
    List::~List() {
        ListNode *p = head, *s;
        while (p->next != NULL) {
            s = p->next;
            p = s->next;
            delete s;
        }
        delete p;
        delete head;
    }
    
    int List::getLength() {
        int len = 0;
        ListNode *p = head;
        while(p->next != NULL) {
            len++;
            p = p->next;
        }
        return len;
    }
    
    void List::CreateList() {
        int num,data;
        cout<<"请输入数据个数";
        cin>>num;
        cout<<endl;
        cout<<"请输入数据";
        cout<<endl;
        for(int i = 0;i<num;i++) {
            cin>>data;
            Insert(data,getLength()+2,false);
        }
        cout<<"List 创建完成"<<endl;
    }
    
    void List::Insert(int data,int index,bool flag) {
        ListNode *p = head, *s;
        if(index<=0) {
            cout<<"数据长度必须大于0";
            return ;
        }
        if(getLength()+1<index) {
            while (p->next != NULL) 
            {
                p = p->next;
            }
            s = (ListNode*)new ListNode[1];
            s->data = data;
            s->next = NULL;
            p->next = s;
            if(flag!=false) {
                cout<<"链表长度为"<<getLength()-1<<",无法插入到第"<<index<<"个位置";
                cout<<"现将数据"<<data<<"插入到表尾部"<<endl;
            }
        }
        else {
            for(int i =0;i<index-1;i++) {
                p = p->next;
            }
            s = (ListNode*)new ListNode[1];
            s->data = data;
            s->next = p->next;
            p->next = s;
            cout<<"数据"<<data<<"插入第"<<index<<"个位置成功!"<<endl;
        }
    }
    
    void List::Delete(int index) {
        ListNode *p = head, *s;
        int i =0;
        if(index<=0||index>getLength()) {
            cout<<"元素不在表中"<<endl;
            return ;
        }
        while(i<index-1) 
        {
            i++;
            p = p->next;
        }
            s= p->next;
            p->next = s->next;
            cout<<""<<index<<"个元素删除成功!"<<endl;
            delete s;
    }
    
    void List::printList() {
        ListNode *p = head;
        cout<<"printList:"<<endl;
        if(p->next==NULL) {
            cout<<"空链表"<<endl;
            return ;
        }
        p= p->next;
        while(p!= NULL) {
            cout<<p->data<<" ";
            p=p->next;
        }
        cout<<endl;
    }
    
    void List::getData(int index) {
        ListNode *p = head;
        if(index<=0||index>getLength()) {
            cout<<"元素不在表中"<<endl;
            return ;
        }
        for(int i = 0;i<index;i++) {
            p = p->next;
        }
        cout<<""<<index<<"个元素为"<<p->data<<endl;
    }
    
    int main() {
        List list;
        list.CreateList();
        list.printList();
        list.Insert(10,2);
        list.Insert(20,10);
        list.printList();
        list.Delete(5);
        list.printList();
        list.getData(4);
        cout<<"目前链表长度为"<<list.getLength()<<endl;
        return 0;
    }
        

     
     
     
     
     
  • 相关阅读:
    CentOS网络接口配置文件ifcfgeth详解
    python session
    Plateau problem
    Maximum subsequence sum
    回溯法解符号三角形
    切莫开一块地荒一块地
    BackTracking_Fixed sum for array elements
    DP_LCS
    Shortest distance between two arrays
    BSP 面试总结
  • 原文地址:https://www.cnblogs.com/qjqj0-0/p/11725981.html
Copyright © 2020-2023  润新知