104 lines
1.8 KiB
C++
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*());
|
|
// }
|
|
};
|