#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 - 2024 ddoss
渝公网安备50011302222260号 渝ICP备2024035333号 【实验平台安全承诺书】 小绿叶技术社区,优化网络中,点击查看配置信息
您的IP:192.168.122.82,2024-10-10 17:57:36,Processed in 0.04002 second(s).