//LinkedListNode.h
#pragma once
template <typename T>
class LinkedListNode
{
public:
T data; // 节点存储的数据
LinkedListNode* next; // 指向下一个节点的指针
// 构造函数, 初始化数据和下一个节点的指针
LinkedListNode(T data, LinkedListNode* next = nullptr) : data(data), next(next) {}
~LinkedListNode() {
delete next;
}
};
//LinkedListNode.h
#pragma once
#include "LinkedListNode.h"
template <class T>
class OnewayLinkedList
{
private:
LinkedListNode<T>* head; //指向链表头部指针
LinkedListNode<T>* tail; //指向链表尾部指针
public:
OnewayLinkedList() :head(nullptr), tail(nullptr) {}
~OnewayLinkedList() {
delete head;
delete tail;
}
void add(T data);
void remove(T data);
void print() const;
};
//OnewayLinkedList.cpp
#include <iostream>
#include "OnewayLinkedList.h"
template <class T>
void OnewayLinkedList<T>::add(T data) {
auto* newNode = new LinkedListNode<T>(data);
if (head == nullptr) {
head = tail = newNode;
}
else {
tail->next = newNode;
tail = newNode;
}
}
template <class T>
void OnewayLinkedList<T>::remove(T data) {
if (head == nullptr) {
std::cout << "链表中没有元素了" << std::endl;
return;
}
if (head->data == data) { // 如果头节点就是要删除的节点
LinkedListNode<T>* temp = head;//保存头节点指针
head = head->next;//头指针指向下一个节点
temp->next = nullptr;//将原头节点的next设置为nullptr,防止删除整个链表
delete temp;
return;
}
// 如果头节点不是要删除的节点,那么遍历链表,找到要删除的节点
LinkedListNode<T>* current = head;//保存头节点指针
while (current->next != nullptr && current->next->data != data)
{
// 继续往下找
current = current->next;
}
//找到要删除的节点
if (current->next != nullptr) {
//首先保存要删除的节点指针
LinkedListNode<T>* temp = current->next;
//将当前节点的next指向要删除节点的下一个节点
current->next = current->next->next;
//将要删除的节点的next设置为nullptr
temp->next = nullptr;
delete temp;
}
}
template <class T>
void OnewayLinkedList<T>::print() const {
LinkedListNode<T>* current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}
//main.cpp
#include <iostream>
#include "OnewayLinkedList.h"
using namespace std;
int main() {
std::cout << "Hello, World!" << std::endl;
OnewayLinkedList<int> intList;
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
intList.remove(1);
intList.print();
return 0;
}
为什么什么编译不通过呢?我应该如何写呢?