首页 > 编程语言 > 详细

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

时间:2019-10-23 16:22:49      阅读:85      评论:0      收藏:0      [点我收藏+]

来自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;
}
    

技术分享图片

 
 
 
 
 

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

原文:https://www.cnblogs.com/qjqj0-0/p/11725981.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!