单链表
头文件
/*****************
* @author xiaolin
* @date 2023-2-23
******************/
#ifndef __LIST_H__
#define __LIST_H__
template <typename T> class LinkList;
template <typename T>
class Lnode
{
private:
T _data;
Lnode<T>* _next;
public:
Lnode(T data = 0, Lnode<T>* next = nullptr):
_data(data),
_next(next)
{}
~Lnode() {delete _next;_next = nullptr;}
inline T Get_data() {return _data;}
friend class LinkList<T>;
};
template <typename T>
class LinkList
{
private:
Lnode<T>* _root;
int _length;
public:
LinkList()
{
_root = new Lnode<T>(0, nullptr);
_length = 0;
}
~LinkList()
{
delete _root;
_root = nullptr;
}
inline int Insert(int index, T value);
inline int Delete(int index);
inline int Search_byvalue(T value);
inline T operator [](int index);
inline void Print();
inline int length();
};
template <typename T>
int LinkList<T>::Insert(int index, T value)
{
if(index > _length) return 0;
Lnode<T>* temp = _root;
while(index--){
temp = temp->_next;
}
Lnode<T>* N_Lnode = new Lnode<T>(value);
N_Lnode->_next = temp->_next;
temp->_next = N_Lnode;
_length = _length + 1;
return 1;
}
//#include <iostream>
template <typename T>
int LinkList<T>::Delete(int index)
{
if(_length == 0 || index > _length || index < 1) return 0;
Lnode<T>* ptr = _root;
index = index - 1;
while(index--){
ptr = ptr->_next;
}
//std::cout << ptr->_data << "\n";
Lnode<T>* temp = ptr->_next;
ptr->_next = temp->_next;
temp->_next = nullptr;
delete temp;
temp = nullptr;
_length = _length - 1;
return 1;
}
template <typename T>
int LinkList<T>::Search_byvalue(T value)
{
Lnode<T>* ptr = _root;
for(int i=0;i<_length;i++){
ptr = ptr->_next;
if(ptr->_data == value) return i;
}
return -1;
}
template <typename T>
T LinkList<T>::operator [](int index)
{
if(!(index>=0 && index < _length)) return -1;
Lnode<T>* ptr = _root;
index = index + 1;
while(index--) ptr = ptr->_next;
return ptr->_data;
}
template <typename T>
int LinkList<T>::length()
{
return _length;
}
#include <iostream>
template <typename T>
void LinkList<T>::Print()
{
Lnode<T>* ptr = _root;
int cnt = 0;
while(ptr->_next){
if(cnt != 0) std::cout << "->";
cnt++;
ptr = ptr->_next;
std::cout << ptr->_data;
}
std::cout << "\n";
}
#endif
main.cpp
/*****************
* @author xiaolin
* @date 2023-2-23
******************/
#include <iostream>
#include "list.h"
using namespace std;
int main()
{
LinkList<int> linklist;
for(auto i:{1, 2, 3, 4, 5, 6})
linklist.Insert(i-1, i);
linklist.Print();
linklist.Delete(1);
linklist.Print();
for(int i=0;i<linklist.length();i++)
cout << linklist[i] << " ";
cout << "\n";
cout << linklist.Search_byvalue(3) << endl;
return 0;
}
1->2->3->4->5->6
2->3->4->5->6
2 3 4 5 6
1

浙公网安备 33010602011771号