c++链表迭代器实现
时间: 2023-10-10 17:04:53 浏览: 139
链表迭代器是一种用于遍历链表的工具,可以按照链表的顺序依次访问每个节点。以下是一个简单的链表迭代器的实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化链表
void initList(Node** head) {
*head = NULL;
}
// 插入节点到链表末尾
void insertNode(Node** head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
Node* cur = *head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = newNode;
}
}
// 遍历链表并打印节点数据
void printList(Node* head) {
Node* cur = head;
while (cur != NULL) {
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
}
// 链表迭代器结构
typedef struct ListIterator {
Node* curNode;
} ListIterator;
// 初始化链表迭代器
void initIterator(ListIterator* iterator, Node* head) {
iterator->curNode = head;
}
// 检查迭代器是否遍历完整个链表
int hasNext(ListIterator* iterator) {
return iterator->curNode != NULL;
}
// 获取迭代器当前节点的数据,并将迭代器指向下一个节点
int next(ListIterator* iterator) {
int data = iterator->curNode->data;
iterator->curNode = iterator->curNode->next;
return data;
}
int main() {
Node* head;
initList(&head);
insertNode(&head, 1);
insertNode(&head, 2);
insertNode(&head, 3);
ListIterator iterator;
initIterator(&iterator, head);
while (hasNext(&iterator)) {
int data = next(&iterator);
printf("%d ", data);
}
printf("\n");
return 0;
}
```
在上面的代码中,我们使用了一个 `ListIterator` 结构来表示链表迭代器。`curNode` 字段指向当前迭代的节点,初始时指向链表的头节点。`initIterator` 函数用于初始化迭代器,接收链表的头节点作为参数。`hasNext` 函数用于检查迭代器是否还有下一个节点,返回值为非零表示有下一个节点,否则表示已经遍历完成。`next` 函数用于获取当前节点的数据,并将迭代器指向下一个节点。
在 `main` 函数中,我们演示了如何使用链表迭代器遍历链表并打印每个节点的数据。
这只是一个简单的链表迭代器实现示例,实际应用中可能还需要考虑删除节点、修改节点数据等操作。你可以根据实际需求进行扩展和改进。
阅读全文