之前的文章C++链表的创建以及增删改查_tingtingli~~~的博客-CSDN博客是使用结构体struct来定义链表中的节点,在面试闪思科技的时候,面试官说这属于c语言的思想构建链表,而对于C++来说,没有充分的利用c++的特性。

于是有了本篇 使用类构建链表

思路也很简单,本文只给出了创建链表和打印链表两种方法,其余方法和C++链表的创建以及增删改查_tingtingli~~~的博客-CSDN博客没有什么差别,大同小异

#include<iostream>
#include<vector>
using namespace std;
//节点类
class Node {
	friend class List;          //声明一个友元类,然后List类就可以对Node的私有成员进行操作
private:
	int val;                    //val代表链表中节点的值
	Node* next;                 //next代表链表中节点的下一节点指向
public:
	Node(int val) {             //节点的初始化,由于其下一节点的指向未知,所以指向nullptr
		this->val = val;
		this->next = nullptr;
	}
};
//链表类
class List {
private:
	Node* head;						   //head很重要,为了让外部不轻易的修改它的值,把head设为私有
public:
	List() {
		head = nullptr;                //初始化List
	}
	void buildList(vector<int>& arr);  //构建链表结构的函数
	void showList();				   //展示链表信息的函数
};
void List::buildList(vector<int>& arr) {
	int n = arr.size();
	if (n == 0) {                      //如果传入的arr为空,直接返回即可
		return;
	}
	head = new Node(arr[0]);           //先令head指向arr的第一个元素,然后再向后构建链表
	Node* temp = head;                 //head代表链表的头部,我们操作链表需要直到链表的头部,才可以对整个链表中的节点进行操作,所有head不可以轻易改变,所以用temp来遍历链表中的节点
	for (int i = 1; i < n; ++i) {
		Node* newNode = new Node(arr[i]);
		temp->next = newNode;
		temp = temp->next;             //放入一个节点后,一定要改变temp的指向,才可以插入下一个节点,否则会发生覆盖的情况
	}
}
void List::showList() {
	Node* temp = head;
	while (temp != nullptr) {         //打印链表中各节点的值
		cout << temp->val << "  ";
		temp = temp->next;
	}
	cout << endl;
}
int main() {
	vector<int> arr = { 1,2,3,4,5 };
	List list;
	list.buildList(arr);
	list.showList();
	return 0;
}

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐