您的位置:首页 > 编程语言 > C语言/C++

C++ 单链表简单实现

2017-03-29 18:21 801 查看
简单的c++ 单链表实现

#ifndef SLINKLIST_H
#define SLINKLIST_H

template <typename T>
class SLinkList
{
public:
//单链表结点
class SLinkNode
{
public:
T date;
SLinkNode *next;
SLinkNode(const T d) :date(d), next(NULL){};
};
typedef SLinkNode* NodePointer;

public:
SLinkList();
~SLinkList();

void insert(const T d);
void push_back(const T d);
void print();
int size();
void erase(const T d);

private:
NodePointer head;

};

template <typename T>
SLinkList<T>::SLinkList()
{
head = new SLinkNode(0);
}

template <typename T>
SLinkList<T>::~SLinkList()
{
NodePointer p = head;
while (p){
NodePointer q = p->next;
delete p;
p = q;
}
}

template <typename T>
void SLinkList<T>::insert(const T d)
{
NodePointer p = new SLinkNode(d);
p->next = head->next;
head->next = p;
}

template <typename T>
void SLinkList<T>::push_back(const T d)
{
NodePointer p = head->next;
int val = 0;

while (p){
p = p->next;
++val;
}
NodePointer q = new SLinkNode(d);
//如果在头结点之后插入的第一个结点
if (0 == val){
q->next = head->next;
head->next = q;
}
else{
p = head->next;
for (int i = 0; i < val - 1; ++i)
p = p->next;
p->next = q;
}
}

template <typename T>
void SLinkList<T>::print()
{
for (NodePointer p = head->next; p; p = p->next){
cout << p->date << endl;
}
}

template <typename T>
int SLinkList<T>::size()
{
int val = 0;
for (NodePointer p = head->next; p; p = p->next){
++val;
}
return val;
}

template <typename T>
void SLinkList<T>::erase(const T d)
{
NodePointer p = head;
while (p){
if (d == p->next->date){
NodePointer q = p->next;
p->next = p->next->next;
delete q;
}
p = p->next;
}
}

#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++-单链表