MTSL/h/List.h

104 lines
1.8 KiB
C++

//
// Created by dongl on 22-9-20.
//
#ifndef CPP_LINKLIST_H
#define CPP_LINKLIST_H
#include <iostream>
#endif //CPP_LINKLIST_H
template<typename U>
class LNode{
public:
U data;
LNode<U> *next = nullptr;
LNode(): next(nullptr){
}
void update(U el){
data = el;
}
};
template<typename T>
class List{
LNode<T> *lNode = new LNode<T>;
unsigned int _length = 0;
LNode<T>* _begin = lNode;
LNode<T>* current = _begin;
public:
List(){
}
void add(T el){
lNode = lNode->next = new LNode<T>;
lNode->data = el;
_length++;
lNode->next = new LNode<T>;
current = _begin->next;
};
int get(T index){
int el;
LNode<T>* node = _begin;
for (int i = 0; i < index; ++i) {
node = node->next;
el = node->data;
}
return el;
}
void remove(unsigned int index){
if(index > _length+1)
std::cerr << "超越范围之外:" << __FILE__ <<
":" <<__LINE__ <<std::endl;
LNode<T>* begin = _begin;
for (int i = 1; i < index; ++i) {
begin = _begin->next;
}
LNode<T>* node = begin->next;
begin->next = begin->next->next;
delete node;
_length--;
}
void update(int index, T el){
LNode<T>* node;
for (int i = 0; i < index; ++i) {
node = _begin->next;
}
node->data = el;
}
int length(){
return _length;
}
LNode<T>*& begin(){
return _begin->next;
}
T operator*(){
return current->data;
}
operator T(){
return current->data;
}
T operator++(){
T i = current->next->data;
current = current->next;
return i;
}
// LNode<T> operator->(){
// return &(operator*());
// }
};