通过节点类创建和打印链表

 构造函数是使用了默认数据域为0,默认指针域为NULL 

#include<iostream>
#include<cstdlib>//size_t
using namespace std;
//用结构体类型表示一个节点

class Node {
public:
	typedef double value_type;
	Node(const value_type& init_data = 0, Node* init_link = NULL) {//默认构造函数的数据域为0
		data_field = init_data;
		link_field = init_link;
	}
	void set_data(const value_type& value) {
		data_field = value;
	}
	void set_link(Node* link) {
		link_field = link;
	}
	value_type data() {
		return data_field;
	}
	Node* link() {
		return link_field;
	}
private:
	value_type data_field;
	Node* link_field;
};
Node* create_list(int num) {
	Node::value_type head_data;
	cin >> head_data;
	Node* head_ptr = new Node(head_data);//我的头节点是有东西的
	Node* pre_ptr = head_ptr;//定义一个前向节点为头节点,后面就通过这个指针连起来
	for (int i = 1; i < num; ++i) {
		Node::value_type temp;
		cin >> temp;
		Node* new_ptr = new Node(temp);
		pre_ptr->set_link(new_ptr);//将前一个指针指向新节点
		pre_ptr = new_ptr;//然后更新该节点
	}
	return head_ptr;
}
//输出链表
void display_list(Node* head_ptr) {
	Node* cursor = head_ptr;
	for (; cursor != NULL; cursor = cursor->link()) {
		cout << cursor->data()<<' ';
	}
	cout << endl;
}
int main() {
	int n = 5;
	Node* head_ptr = create_list(n);//输入1 2 3 4 5
	display_list(head_ptr);//1 2 3 4 5
        while(1);
}

解析:

首先创建头节点,输入头节点数据域,指针域由构造函数可知指向NULL,然后循环创建节点,通过pre_ptr连接所以节点即可

步骤一、pre_ptr指向头节点,创建新节点

步骤二、通过pre_ptr连接节点:设置pre_ptr的指针域为新节点,然后更新pre_ptr

步骤三、重复步骤二,知道创建的节点到达预设的num即可.

(完)

是的,实现链表模板需要创建节点模板和链表模板。 节点模板用于表示链表中的每个节点,包含数据和指向下一个节点的指针。节点模板通常包含一个构造函数,用于初始化节点的数据和指针。例如: ```c++ template <typename T> class Node { public: T data; Node<T>* next; Node(const T& d, Node<T>* n = nullptr) : data(d), next(n) {} }; ``` 链表模板用于表示整个链表,包含指针、尾指针和链表大小等属性,以及添加、删除、清空、查找和打印等操作的方法。例如: ```c++ template <typename T> class LinkedList { private: Node<T>* head; Node<T>* tail; int size; public: LinkedList() : head(nullptr), tail(nullptr), size(0) {} ~LinkedList() { Node<T>* curr = head; while (curr != nullptr) { Node<T>* temp = curr; curr = curr->next; delete temp; } size = 0; } int getSize() const { return size; } void add(const T& data) { Node<T>* newNode = new Node<T>(data); if (head == nullptr) { head = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } size++; } bool remove(const T& data) { Node<T>* prev = nullptr; Node<T>* curr = head; while (curr != nullptr) { if (curr->data == data) { if (prev == nullptr) { head = curr->next; } else { prev->next = curr->next; } if (tail == curr) { tail = prev; } delete curr; size--; return true; } prev = curr; curr = curr->next; } return false; } bool contains(const T& data) const { Node<T>* curr = head; while (curr != nullptr) { if (curr->data == data) { return true; } curr = curr->next; } return false; } void clear() { Node<T>* curr = head; while (curr != nullptr) { Node<T>* temp = curr; curr = curr->next; delete temp; } head = nullptr; tail = nullptr; size = 0; } void print() const { Node<T>* curr = head; while (curr != nullptr) { std::cout << curr->data << " "; curr = curr->next; } std::cout << std::endl; } }; ``` 这个链表模板实现了添加、删除、清空、判断是否包含某个元素、获取链表大小和打印链表的功能。可以使用该模板来创建任意型的链表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无情的搬砖机器

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值