GeneralList.h
#pragma once
#include <stdio.h>
struct GeneralListNode
{
GeneralListNode* next;
GeneralListNode* pre;
void* data;
GeneralListNode()
{
next = NULL;
pre = NULL;
data = NULL;
}
~GeneralListNode()
{
if (NULL != data)
{
delete data;
data = NULL;
}
}
};
class GeneralList
{
public:
GeneralList();
~GeneralList();
GeneralListNode* getHead(); //获取头节点
GeneralListNode* getTail(); //获取尾节点
bool push_front(void *data);
bool push_back(void *data);
void pop_front();
void pop_back();
void clear();
int count();
private:
GeneralListNode* m_pHead; //链表头节点
GeneralListNode* m_pTail; //链表尾节点
int m_iSize; //节点数
};
GeneralList.cpp
#include "GeneralList.h"
GeneralList::GeneralList()
{
m_pHead = NULL;
m_pTail = NULL;
m_iSize = 0;
}
GeneralList::~GeneralList()
{
clear();
}
GeneralListNode* GeneralList::getHead()
{
return m_pHead;
}
GeneralListNode* GeneralList::getTail()
{
return m_pTail;
}
bool GeneralList::push_front(void *data)
{
GeneralListNode* pNode = new GeneralListNode;
if (NULL == pNode)
{
return false; //空间申请失败
}
pNode->next = m_pHead;
pNode->pre = NULL;
pNode->data = data;
if (0 == m_iSize)
{
m_pTail = pNode;
}
else
{
m_pHead->pre = pNode;
}
m_pHead = pNode;
m_iSize++; //节点数加1
return true;
}
bool GeneralList::push_back(void* data)
{
GeneralListNode* pNode = new GeneralListNode;
if (NULL == pNode)
{
return false; //空间申请失败
}
pNode->next = NULL;
pNode->pre = m_pTail;
pNode->data = data;
if (0 == m_pTail)
{
m_pHead = pNode;
}
else
{
m_pTail->next = pNode;
}
m_pTail = pNode;
m_iSize++; //节点数加1
return true;
}
void GeneralList::pop_front()
{
if ( 0 >= m_iSize)
{
return;
}
GeneralListNode* pNode = m_pHead;
if (1 < m_iSize) //剩下多个节点
{
m_pHead = m_pHead->next;
m_pHead->pre = NULL;
}
else //只剩下一个节点
{
m_pHead = NULL;
m_pTail = NULL;
}
delete pNode;
m_iSize--;
}
void GeneralList::pop_back()
{
if (0 >= m_iSize)
{
return;
}
GeneralListNode* pNode = m_pTail;
if (1 < m_iSize) //剩下多个节点
{
m_pTail = m_pTail->pre;
m_pTail->next = NULL;
}
else //只剩下一个节点
{
m_pHead = NULL;
m_pTail = NULL;
}
delete pNode;
m_iSize--;
}
void GeneralList::clear()
{
while (m_iSize > 0)
{
pop_front();
}
}
int GeneralList::count()
{
return m_iSize;
}