单链表的实现(cpp版本)
链表节点的定义
template <class T>
struct LinkNode //节点类
{
T Data; //节点的数据
LinkNode *Next; //指向该节点的下一个节点的指针
LinkNode() : Next(NULL)
{
cout << "please enter data: ";
cin >> Data;
}
LinkNode(const T &d, LinkNode *p = NULL) : Data(d), Next(p) {
}
~LinkNode() {
}
};
链表实例化
template <class T>
SingleLinkedList<T>::SingleLinkedList(int len)
{
LinkNode<T> *Cur;
for (size_t i = 0; i < len; i++)
{
Cur = new LinkNode<T>();
if (i == 0)
{
Head = Cur;
Tail = Cur;
}
else
{
Tail->Next = Cur;
Tail = Tail->Next;
}
ListSize++;
}
}
删除链表的某一节点
template <class T>
void SingleLinkedList<T>::Delete(const T &Data)
{
LinkNode<T> *Prev = this->Head;
LinkNode<T> *Temp = nullptr;
if (this->Head->Data == Data)
{
this->Head = Prev->Next;
Prev->Next = nullptr;
free(Prev);
ListSize--;
}
while (Prev->Next != nullptr && Prev->Next->Data != Data)
{
Prev = Prev->Next;
}
if (Prev->Next != nullptr && Prev->Next != this->Tail)
{
Temp = Prev;
Temp->Next = Prev->Next->Next;
free(Prev->Next);
ListSize--;
}
else
{
this->Tail = Prev;
this->Tail->Next = nullptr;
free(Prev->Next);
ListSize--;
}
}
删除整个链表
template <class T>
void SingleLinkedList<T>::DeleteList()
{
LinkNode<T> *Temp, *DeleteTemp;
DeleteTemp = this->Head;
while (DeleteTemp != nullptr)
{
Temp = DeleteTemp->Next;
free