C++ 单向链表

/*单向链表
	链表的功能包括:向尾节点添加数据,遍历链表中的节点,在链表结束时释放所有节点
*/

class CNode  //定义一个节点类
{
public:
	CNode *m_pNext;  //定义一个节点指针,指向下一个节点
	int m_Data;  //定义节点的数据
	CNode()  //定义节点类的构造函数
	{
		m_pNext = NULL;  //将m_pNext设置为空
	}
};

 
class CSLList          // 定义链表类CSLList类
{
private:
	CNode *m_pHeader;  //定义头节点
	int m_NodeSum;     //定义节点数量
public:
	CSLList()          //定义链表的构造函数
	{
		m_pHeader = NULL;  //初始化m_pHeader
		m_NodeSum = 0;     //初始化m_NodeSum
	}
	~CSLList()
	{
		if (m_NodeSum > 0)
		{
			CNode *pDelete = m_pHeader;
			CNode *pTmp = NULL;
			for (int i=0; i<m_NodeSum; i++)
			{
				pTmp = pDelete->m_pNext;
				delete pDelete;
				pDelete = pTmp;
			}
			m_NodeSum = 0;
			pDelete = NULL;
			pTmp = NULL;
		}
		m_pHeader = NULL;
	}

	CNode* MoveTrail()  //移动到尾节点
	{
		CNode* pTmp = m_pHeader;
		for (int i=1;i<m_NodeSum;i++)
		{
			pTmp = pTmp->m_pNext;
		}
		return pTmp;
	}

	void AddNode(CNode *pNode)  //添加节点
	{
		if (m_NodeSum == 0)
		{
			m_pHeader = pNode;
		}
		else
		{
			CNode* pTrail = MoveTrail();
			pTrail->m_pNext = pNode;
		}
		m_NodeSum++;
	}

	void PassList()  //遍历链表
	{
		if (m_NodeSum > 0)  //判断链表是否为空
		{
			CNode* pTmp = m_pHeader;
			//cout << pTmp.m_Data << endl;
			printf("%4d", pTmp->m_Data);
			for (int i=1;i<m_NodeSum;i++)
			{
				pTmp = pTmp->m_pNext;
				printf("%4d", pTmp->m_Data);
			}
		}
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值