C++手写链表:从节点到迭代器
list模拟实现(简单版)【C++】
基本结构与节点设计
链表的核心是节点(Node),每个节点存储数据和指向下一个节点的指针。在C++中,可通过结构体或类实现:
template <typename T>
struct ListNode {
T data; // 数据域
ListNode* next; // 指针域
ListNode(const T& val) : data(val), next(nullptr) {}
};
链表类框架
封装链表操作,包括构造、插入、删除等:
template <typename T>
class SimpleList {
private:
ListNode<T>* head; // 头节点指针
size_t size_; // 链表长度
public:
SimpleList() : head(nullptr), size_(0) {}
~SimpleList();
void push_front(const T& val);
void pop_front();
bool empty() const { return head == nullptr; }
size_t size() const { return size_; }
};
关键操作实现
头插法(push_front)
template <typename T>
void SimpleList<T>::push_front(const T& val) {
ListNode<T>* newNode = new ListNode<T>(val);
newNode->next = head;
head = newNode;
++size_;
}
头删法(pop_front)
template <typename T>
void SimpleList<T>::pop_front() {
if (empty()) return;
ListNode<T>* temp = head;
head = head->next;
delete temp;
--size_;
}
析构函数 需释放所有节点内存:
template <typename T>
SimpleList<T>::~SimpleList() {
while (!empty()) {
pop_front();
}
}
迭代器支持(可选)
为支持范围遍历,可嵌套定义迭代器类:
template <typename T>
class SimpleList {
public:
class Iterator {
ListNode<T>* current;
public:
Iterator(ListNode<T>* p) : current(p) {}
T& operator*() { return current->data; }
Iterator& operator++() { current = current->next; return *this; }
bool operator!=(const Iterator& other) { return current != other.current; }
};
Iterator begin() { return Iterator(head); }
Iterator end() { return Iterator(nullptr); }
};
使用示例:
SimpleList<int> list;
for (auto it = list.begin(); it != list.end(); ++it) {
std::cout << *it << " ";
}
注意事项
- 内存管理:确保每次
new操作都有对应的delete,避免内存泄漏。 - 边界条件:处理空链表或单节点链表的特殊情况。
- 异常安全:插入/删除操作可能因内存不足抛出异常,需保证对象状态一致性。
此实现仅包含基础功能,实际标准库的std::list还涉及双向链表、更复杂的迭代器设计等特性。
BbS.okane479.info/PoSt/1121_109252.HtM
BbS.okane480.info/PoSt/1121_326613.HtM
BbS.okane481.info/PoSt/1121_557748.HtM
BbS.okane482.info/PoSt/1121_072461.HtM
BbS.okane483.info/PoSt/1121_618284.HtM
BbS.okane484.info/PoSt/1121_436863.HtM
BbS.okane485.info/PoSt/1121_083135.HtM
BbS.okane486.info/PoSt/1121_005767.HtM
BbS.okane487.info/PoSt/1121_859240.HtM
BbS.okane488.info/PoSt/1121_738246.HtM
BbS.okane479.info/PoSt/1121_196530.HtM
BbS.okane480.info/PoSt/1121_077570.HtM
BbS.okane481.info/PoSt/1121_047261.HtM
BbS.okane482.info/PoSt/1121_147366.HtM
BbS.okane483.info/PoSt/1121_681521.HtM
BbS.okane484.info/PoSt/1121_013547.HtM
BbS.okane485.info/PoSt/1121_811446.HtM
BbS.okane486.info/PoSt/1121_856439.HtM
BbS.okane487.info/PoSt/1121_204543.HtM
BbS.okane488.info/PoSt/1121_198843.HtM
BbS.okane479.info/PoSt/1121_298221.HtM
BbS.okane480.info/PoSt/1121_626144.HtM
BbS.okane481.info/PoSt/1121_340792.HtM
BbS.okane482.info/PoSt/1121_646244.HtM
BbS.okane483.info/PoSt/1121_348705.HtM
BbS.okane484.info/PoSt/1121_168821.HtM
BbS.okane485.info/PoSt/1121_015813.HtM
BbS.okane486.info/PoSt/1121_614042.HtM
BbS.okane487.info/PoSt/1121_775781.HtM
BbS.okane488.info/PoSt/1121_886596.HtM
BbS.okane479.info/PoSt/1121_474775.HtM
BbS.okane480.info/PoSt/1121_571243.HtM
BbS.okane481.info/PoSt/1121_035163.HtM
BbS.okane482.info/PoSt/1121_307850.HtM
BbS.okane483.info/PoSt/1121_416680.HtM
BbS.okane484.info/PoSt/1121_467786.HtM
BbS.okane485.info/PoSt/1121_726692.HtM
BbS.okane486.info/PoSt/1121_451248.HtM
BbS.okane487.info/PoSt/1121_139714.HtM
BbS.okane488.info/PoSt/1121_635530.HtM
BbS.okane490.info/PoSt/1121_144242.HtM
BbS.okane491.info/PoSt/1121_612403.HtM
BbS.okane492.info/PoSt/1121_002605.HtM
BbS.okane493.info/PoSt/1121_733793.HtM
BbS.okane494.info/PoSt/1121_580833.HtM
BbS.okane495.info/PoSt/1121_600220.HtM
BbS.okane496.info/PoSt/1121_586720.HtM
BbS.okane497.info/PoSt/1121_152140.HtM
BbS.okane498.info/PoSt/1121_223296.HtM
BbS.okane499.info/PoSt/1121_600683.HtM
BbS.okane490.info/PoSt/1121_883111.HtM
BbS.okane491.info/PoSt/1121_504659.HtM
BbS.okane492.info/PoSt/1121_051672.HtM
BbS.okane493.info/PoSt/1121_417617.HtM
BbS.okane494.info/PoSt/1121_432389.HtM
BbS.okane495.info/PoSt/1121_329017.HtM
BbS.okane496.info/PoSt/1121_085898.HtM
BbS.okane497.info/PoSt/1121_297231.HtM
BbS.okane498.info/PoSt/1121_961401.HtM
BbS.okane499.info/PoSt/1121_320516.HtM
BbS.okane490.info/PoSt/1121_420386.HtM
BbS.okane491.info/PoSt/1121_938888.HtM
BbS.okane492.info/PoSt/1121_715899.HtM
BbS.okane493.info/PoSt/1121_262705.HtM
BbS.okane494.info/PoSt/1121_340195.HtM
BbS.okane495.info/PoSt/1121_546017.HtM
BbS.okane496.info/PoSt/1121_651132.HtM
BbS.okane497.info/PoSt/1121_588186.HtM
BbS.okane498.info/PoSt/1121_656078.HtM
BbS.okane499.info/PoSt/1121_138776.HtM
BbS.okane490.info/PoSt/1121_702860.HtM
BbS.okane491.info/PoSt/1121_447638.HtM
BbS.okane492.info/PoSt/1121_111649.HtM
BbS.okane493.info/PoSt/1121_096481.HtM
BbS.okane494.info/PoSt/1121_993309.HtM
BbS.okane495.info/PoSt/1121_612906.HtM
BbS.okane496.info/PoSt/1121_351714.HtM
BbS.okane497.info/PoSt/1121_469096.HtM
BbS.okane498.info/PoSt/1121_066349.HtM
BbS.okane499.info/PoSt/1121_701391.HtM