下面是一个示例代码,用于反转单链表的C++实现:
#include <iostream>
// 链表节点定义
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 反转链表函数
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr; // 前驱节点
ListNode* curr = head; // 当前节点
while (curr != nullptr) {
ListNode* nextTemp = curr->next; // 保存当前节点的后继节点
curr->next = prev; // 将当前节点指向前驱节点
// 更新前驱节点和当前节点
prev = curr;
curr = nextTemp;
}
return prev; // 返回反转后的头节点(原先的尾节点)
}
// 输出链表元素函数(仅用于测试)
void printList(ListNode* head) {
while (head != nullptr) {
std::cout << head->val << " ";
head = head->next;
}
}
int main() {
// 创建一个示例链表:1 -> 2 -> 3 -> 4 -> 5
ListNode* head = new ListNode(1);
ListNode* node2 = new ListNode(2);
ListNode* node3 = new ListNode(3);
ListNode* node4 = new ListNode(4);
ListNode* node5 = new ListNode(5);
head->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = node5;
std::cout << "Original List: ";
printList(head); // 输出原链表
// 反转链表
ListNode* reversedHead = reverseList(head);
std::cout << "\nReversed List: ";
printList(reversedHead); // 输出反转后的链表
return 0;
}
以上代码使用迭代的方式实现了反转单链表,通过遍历节点并更改节点指针的指向来完成反转。运行该程序会输出原始链表和反转后的链表。请注意在实际应用中要确保释放动态分配的内存以避免内存泄漏。
内容由零声教学AI助手提供,问题来源于学员提问