下面是一个示例函数,该函数接受两个参数:一个指向链表头部或尾部的指针,以及遍历链表的方向。
#include
// 节点结构体
struct Node {
int data;
Node* next;
};
// 遍历链表函数
void traverseLinkedList(Node* headOrTail, bool isForward) {
if (headOrTail == nullptr) {
std::cout << "链表为空" << std::endl;
return;
}
if(isForward) {
// 正向遍历
Node* currentNode = headOrTail;
while (currentNode != nullptr) {
std::cout << currentNode->data << " ";
currentNode = currentNode->next;
}
} else {
// 反向遍历
Node* currentNode = headOrTail;
Node* prevNode = nullptr;
while (currentNode != nullptr) {
Node* nextNode = currentNode->next;
currentNode->next = prevNode;
prevNode = currentNode;
currentNode = nextNode;
}
Node* reversedHead = prevNode;
while (reversedHead != nullptr) {
std::cout << reversedHead->data << " ";
reversedHead = reversedHead->next;
}
}
std::cout << std::endl;
}
int main() {
// 创建链表节点
Node* node1 = new Node();
Node* node2 = new Node();
Node* node3 = new Node();
// 设置节点数据和指针
node1->data = 1;
node1->next = node2;
node2->data = 2;
node2->next = node3;
node3->data = 3;
node3->next = nullptr;
// 正向遍历链表
std::cout << "正向遍历:";
traverseLinkedList(node1, true);
// 反向遍历链表
std::cout << "反向遍历:";
traverseLinkedList(node3, false);
// 释放内存
delete node1;
delete node2;
delete node3;
return 0;
}
这个示例中,我们首先定义了一个Node
结构体来表示链表节点。然后,我们定义了一个traverseLinkedList
函数,该函数接受一个指向链表头部或尾部的指针以及一个布尔值来表示遍历方向。在函数内部,我们使用一个while循环来遍历链表。如果遍历方向为正向,则从头部开始遍历,并将节点数据打印出来;如果遍历方向为反向,则先将链表反转,然后从头部开始遍历并打印节点数据。最后,我们在main
函数中创建了一个简单的链表,并调用traverseLinkedList
函数来进行正向和反向遍历。