请使用模板参数设计实现单向链表模板类LinkList,应能根据需求构建相应类型数据结点的单向链表结构,main(void)完成对其的测试。
时间: 2024-02-25 10:55:16 浏览: 110
好的,我可以为您回答这个问题。
以下是使用模板参数设计实现单向链表模板类LinkList的代码:
```c++
template<typename T>
class Node {
public:
T data;
Node<T>* next;
Node(const T& data = T(), Node<T>* next = nullptr) : data(data), next(next) {}
~Node() {}
};
template<typename T>
class LinkList {
private:
Node<T>* head;
int size;
public:
LinkList() : head(nullptr), size(0) {}
~LinkList() {}
void insert(const T& data) {
Node<T>* newNode = new Node<T>(data, nullptr);
if (head == nullptr) {
head = newNode;
}
else {
Node<T>* cur = head;
while (cur->next != nullptr) {
cur = cur->next;
}
cur->next = newNode;
}
++size;
}
void remove(const T& data) {
Node<T>* cur = head;
Node<T>* prev = nullptr;
while (cur != nullptr && cur->data != data) {
prev = cur;
cur = cur->next;
}
if (cur != nullptr) {
if (prev == nullptr) {
head = head->next;
}
else {
prev->next = cur->next;
}
delete cur;
--size;
}
}
void display() const {
Node<T>* cur = head;
while (cur != nullptr) {
std::cout << cur->data << " ";
cur = cur->next;
}
std::cout << std::endl;
}
int getSize() const {
return size;
}
};
```
在这里,我们使用了两个模板类:Node 和 LinkList。Node 类表示单向链表中的数据节点,而 LinkList 类表示单向链表本身。
在 Node 类中,我们保存了数据和下一个节点的指针。在 LinkList 类中,我们保存了链表的头节点和链表的大小。
我们的 LinkList 类有以下几个方法:
- insert:将数据插入到链表的尾部。
- remove:从链表中删除指定的数据。
- display:显示链表中的所有数据。
- getSize:返回链表中的元素数量。
我们可以使用以下代码来测试 LinkList 类:
```c++
int main() {
LinkList<int> list;
list.insert(1);
list.insert(2);
list.insert(3);
list.insert(4);
list.display(); // 输出 1 2 3 4
list.remove(2);
list.remove(4);
list.display(); // 输出 1 3
std::cout << "Size: " << list.getSize() << std::endl; // 输出 Size: 2
return 0;
}
```
以上就是使用模板参数设计实现单向链表模板类 LinkList 的代码和测试。
阅读全文