使用类模板模拟单向链表操作,要求如下: (1)通过有参构造能够建立,具有n个元素的链表 (2)能够实现求出链表的长度 (3)能够实现按位置查找链表中第i个结点 (4)能够实现遍历链表
时间: 2024-09-25 12:02:06 浏览: 35
在C++中,我们可以创建一个类模板`LinkList<T>`来模拟单向链表操作。这里`T`是一个模板参数,代表链表节点的数据类型。以下是基本的实现:
```cpp
template <typename T>
class LinkList {
public:
// 构造函数,默认初始化链表为空
LinkList(int n = 0) : head(nullptr), length(0) {
for (int i = 0; i < n; ++i)
push_back(T());
}
// 求链表长度
int length() const { return length; }
// 在指定位置插入新节点
void insert(int pos, const T& value) {
if (pos < 0 || pos > length) {
throw std::out_of_range("Position out of range");
}
Node* newNode = new Node(value);
newNode->next = head;
for (int i = 0; i < pos - 1 && head != nullptr; ++i)
head = head->next;
head = newNode;
++length;
}
// 查找第i个节点
Node* find(int i) const {
if (i < 0 || i >= length) {
throw std::out_of_range("Index out of range");
}
Node* current = head;
for (int j = 0; j < i && current != nullptr; ++j)
current = current->next;
return current;
}
// 遍历链表并打印元素
void traverse() const {
Node* current = head;
while (current != nullptr) {
std::cout << current->value << " ";
current = current->next;
}
std::cout << "\n";
}
private:
struct Node {
T value;
Node* next;
Node(const T& value) : value(value), next(nullptr) {}
};
Node* head;
int length;
};
```
阅读全文