以下是一个单向链表倒序的算法示例:
#include <iostream>
struct Node {
int data;
Node* next;
};
// 插入节点到链表头部
void insertNode(Node** head, int data) {
Node* newNode = new Node();
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
// 遍历并打印链表
void printList(Node* node) {
while (node != nullptr) {
std::cout << node->data << " ";
node = node->next;
}
std::cout << std::endl;
}
// 倒序单向链表
Node* reverseList(Node* head) {
if (head == nullptr || head->next == nullptr)
return head;
Node* prev = nullptr; // 指向前一个节点
Node* curr = head; // 当前节点
Node* next;
while (curr != nullptr) {
next = curr->next; // 保存下一个节点
// 反转当前节点指针指向前一个节点
curr->next = prev;
// 移动prev和curr指针继续遍历链表
prev = curr;
curr = next;
}
return prev; // 返回反转后的头结点(原链表尾结点)
}
int main() {
Node* head = nullptr;
// 创建测试链表: 1 -> 2 -> 3 -> 4 -> 5
for (int i = 5; i > 0; --i)
insertNode(&head, i);
std::cout << "Original List: ";
printList(head);
head = reverseList(head);
std::cout << "Reversed List: ";
printList(head);
return 0;
}
上述代码中,首先定义了一个表示节点的结构体 Node,包含一个整数数据成员 data 和指向下一个节点的指针 next。然后实现了插入节点到链表头部的函数 insertNode()、遍历并打印链表的函数 printList()、以及倒序单向链表的函数 reverseList()。
在主函数中,首先创建一个测试链表(1 -> 2 -> 3 -> 4 -> 5),然后调用 reverseList() 函数对链表进行倒序操作,并通过调用 printList() 函数打印出结果。
输出示例:
Original List: 1 2 3 4 5
Reversed List: 5 4 3 2 1
该算法通过维护两个指针(prev 和 curr)以及临时变量 next 来完成单向链表的倒序操作,最后返回反转后的头结点。
内容由零声教学AI助手提供,问题来源于学员提问




