c++实现链表基本框架代码

#include <iostream>
#include<stdexcept>
using namespace std;
#define eleType int




struct ListNode                  //创建链表结点
{
    eleType data;
    ListNode *next;
  ListNode(eleType x):data(x),next(NULL){}//初始化列表
};


class LinkedList{                   //创建链表,私有公有
private:
     ListNode* head;
     int size;
public:
     LinkedList():head(NULL),size(0){}
     ~LinkedList();
     void insert(int i,eleType value);
     void remove(int i);
     ListNode* find(eleType value);
     ListNode* get(int i);
     void update(int i,eleType value);
     void print();
};

LinkedList::~LinkedList(){   //析构函数(使用完毕后自动遍历删除链表)
ListNode *curr=head;
while (curr!=NULL)
{
    ListNode *tmp=curr;
    curr=curr->next;
    delete tmp;
}
}


void LinkedList::insert(int i,eleType value){
if(i<0||i>size){
    throw std::out_of_range("Invaild");
}
ListNode* newNode = new ListNode(value);//星号放左边放右边都行
if(i==0){
    newNode->next=head;        //插在头的位置
    head= newNode;
}else{
    ListNode *curr = head;     //插在i位置,从头开始一直将curr找到第i个位置
    for(int j=0;j<i-1;j++){
        curr=curr->next;
    }
      newNode->next=curr->next;     //插入,注意顺序
     curr->next = newNode;      
}
++size;
cout<<value<<endl;
}

void LinkedList::remove(int i){
if(i<0||i>size){
    throw std::out_of_range("Invaild");
}
if(i==0){
    ListNode *temp=head;
    head = head->next;
    delete temp;
}else{
ListNode *curr=head;
for(int j=0;j<i-1;j++){
curr =curr->next;
}
ListNode* temp=curr->next;
curr->next=temp->next;
delete temp;
}
}

ListNode *LinkedList::find(eleType value){
    ListNode *curr=head;
    while(curr&&curr->data!=value){
          curr=curr->next;
    }
    return curr;  
}

ListNode *LinkedList::get(int i){
if(i<0||i>size){
     throw std::out_of_range("Invaild");
}
ListNode *curr=head;
for(int j=0;j<i;j++){
curr=curr->next;
}
return curr;
}


void LinkedList::update(int i,eleType value){
get(i)->data=value;
}

void LinkedList::print(){
ListNode *curr=head;
while (curr!=NULL){
std::cout << curr->data;
curr=curr->next;
if(curr){
      cout<<"";
}else{
    cout<<endl;
}
}
}

int main(){
LinkedList list;
list.insert(0,10);
list.insert(1,20);
list.insert(2,30);
list.insert(3,40);
list.insert(3,50);
list.print();
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值