C++封装链表

本文介绍了如何在C++中使用结构体和类实现链表,包括节点结构的定义、链表的头尾指针管理、构造析构函数,以及尾添加、头删除、遍历和获取链表长度等基本操作。
摘要由CSDN通过智能技术生成

想要构建一个链表,首先要有节点的结构和链表自身的结构。

节点的结构:使用的是结构体

struct Node {
	int val;//装数据的值
	Node* pNext;//指向下一个节点的指针
	Node(int v) {//构造函数 (带参数给值初始化)
		val = v;
		pNext = nullptr;

	}
};

链表的结构:

定义头和尾指针,构造和析构函数:

class CList {
public:
	Node* m_pHead;
	Node* m_pEnd;
	int m_len;
	CList() {
		m_pHead = m_pEnd = nullptr;
		m_len = 0;
	}
    ~CList() {
	Node* pTemp = nullptr;//先设置一个临时的
	while (m_pHead) {//判断为非空链表
		pTemp = m_pHead;
		m_pHead = m_pHead->pNext;
		delete pTemp;
	}
	m_pHead = m_pEnd = nullptr;
	m_len = 0;
}

};

链表的初始化结构写完,我们为链表添加一些功能,分别为尾添加链表和头删除链表。

尾添加链表:先new一个节点的值,判断是否为空链表,不为空则将这个值赋给尾节点的下一个,然后把他作为新的尾节点。若为空链表,则将这个值赋给头节点和尾节点。

void PushBack(int v) {
	Node* pNode = new Node(v);
	if (m_pHead) {//非空链表
		m_pEnd->pNext = pNode;;
		m_pEnd = pNode;
	}
	else {
		m_pEnd = m_pHead = pNode;
	}
	++m_len;
}

头删除链表:判断头节点是否为空,不为空,将头节点放在一个临时的节点中,再判断链表长度是否为1,如果为1,说明只有一个节点,将头节点和尾节点都赋为空。如果长度不为1,则将头节点的下一个节点变成头节点,删除掉标记的头节点并赋为空,长度减一。

void PopFront() {
	if (m_pHead) {
		Node* pTemp = m_pHead;//先标记头
		if (m_len == 1) {
			m_pEnd = m_pHead = nullptr;

		}
		else {
			m_pHead = m_pHead->pNext;
		}
		delete pTemp;//删除标记的
		pTemp = nullptr;
		--m_len;
	}
}

遍历链表:先将头节点放在一个临时的节点中,再判断是否为空,如果不为空则输出该节点的值,输出后指向下一个节点

void ShowList() {

	Node* pTemp = m_pHead;
	while (pTemp) {
		cout << pTemp->val << "  ";
		pTemp = pTemp->pNext;
	}
	cout << endl;
}

获取链表的长度:

int getLen() {
	return m_len;
}

调用上面的方法测试:

int main()
{
	CList lst;
	lst.PushBack(1);//添加链表的值
	lst.PushBack(2);
	lst.PushBack(3);
	lst.PushBack(4);
	cout << lst.getLen() << endl;//获取长度
	lst.ShowList();//遍历链表
	lst.PopFront();//删除头
	cout << lst.getLen() << endl;//获取删除后的长度
	lst.ShowList();//遍历删除后的链表

	system("pause");
	return 0;
}

  • 22
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值