#include <iostream>
struct ListNode { // 链表通过节点实现,节点包含:数据和指向下一个节点的指针
int parameter; // 节点存储的数据 【属性1】
ListNode *next; // 链表桥接:链表类型被指针继承 【属性2】
ListNode(int x) : parameter(x), next(nullptr) {}
// 声明构造函: 与结构体名称相同 ListNode(int x) 传入的参数 是 int 整形
// 初始化构造函数: 接收 x 参数来初始化本身
// 链表桥接:next(nullptr) 内置函数 nullptr 空0 表示没有后续节点,不需要桥接
};
// 函数用于反转链表
ListNode* reverseList(ListNode* head) {
// ListNode* head 链表 接头点; 函数结构体:需要对结构体表 ListNode 进行操作的函数
ListNode *prev = nullptr; // prev 指针继承结构体:指向 结构体的指针 为空: 跟踪【反转】链表过程中的前一个节点
ListNode *current = head; // 指针继承结构体: 表的头节点,遍历链表
ListNode *next = nullptr; // 临时存储下一个节点
while (current != nullptr) {
// 如果main() 函数传来的 head 不是空的,进入循环
next = current->next; // 本函数指针next = 原结构体 (current = ListNode) 中的 ListNode.next 成员
current->next = prev; // 原结构体表结尾 = 本函数 表接头 : 原结构体 ListNode.next 成员 = 本函数指针 prev ; 反转当前节点的指针
prev = current; // 移动prev指针: prev 获取数据
current = next; // 移动current指针
}
// 当前头节点已经是链表的最后一个节点,反转后它将成为新的头节点
head = prev;
return head;
}
// 辅助函数:打印链表
void printList(ListNode *node) {
while (node != nullptr) {
std::cout << node->parameter << " ";
node = node->next;
}
std::cout << "nullptr" << std::endl; // 打印链表结束标记
}
// 辅助函数:清理分配的内存
void cleanList(ListNode *&head) {
ListNode *current = head;
while (current != nullptr) {
ListNode *temp = current;
current = current->next;
delete temp;
}
head = nullptr;
}
int main() {
// 创建链表:1 -> 2 -> 3 -> nullptr
ListNode *head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
// 打印原始链表
std::cout << "Original list: ";
printList(head);
// 反转链表
head = reverseList(head);
// 打印反转后的链表
std::cout << "Reversed list: ";
printList(head);
// 清理分配的内存
cleanList(head);
return 0;
}Powered by ddoss.cn 12.0
©2015 - 2025 ddoss
渝公网安备50011302222260号
渝ICP备2024035333号
【实验平台安全承诺书】
小绿叶技术社区,优化网络中,点击查看配置信息
主机监控系统: 安全防火墙已开启检查cc攻击-下载文件完成后等待10s 恢复访问,检查连接数低于峰值恢复访问
您的IP:216.73.216.110,2025-12-01 14:34:56,Processed in 0.02017 second(s).