单链表

头文件

/*****************
* @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
posted @ 2023-02-25 20:15  小麟qwq  阅读(14)  评论(0)    收藏  举报