C++ 递归链表反转示例代码 - 详细解析及优化
下面是一个用 C++ 编写的递归链表反转示例代码:\n\ncpp\n#include \"iostream\"\n\nstruct ListNode {\n int value;\n ListNode* next;\n ListNode(int val) : value(val), next(nullptr) {}\n};\n\nListNode* reverseList(ListNode* head) {\n if (head == nullptr || head->next == nullptr) {\n return head;\n }\n \n ListNode* newHead = reverseList(head->next);\n head->next->next = head;\n head->next = nullptr;\n \n return newHead;\n}\n\nvoid printList(ListNode* head) {\n ListNode* current = head;\n while (current != nullptr) {\n std::cout << current->value << " ";\n current = current->next;\n }\n std::cout << std::endl;\n}\n\nint main() {\n ListNode* head = new ListNode(1);\n head->next = new ListNode(2);\n head->next->next = new ListNode(3);\n head->next->next->next = new ListNode(4);\n head->next->next->next->next = new ListNode(5);\n \n std::cout << "Original list: ";\n printList(head);\n \n ListNode* reversedHead = reverseList(head);\n \n std::cout << "Reversed list: ";\n printList(reversedHead);\n \n return 0;\n}\n\n\n此代码中,首先定义了一个链表节点结构体ListNode,包含一个整数value和一个指向下一个节点的指针next。然后定义了一个递归函数reverseList,该函数用于反转给定链表。在函数中,首先检查链表是否为空或只有一个节点,如果是,则直接返回原链表。否则,通过递归调用reverseList函数将下一个节点之后的链表反转,并将当前节点的next指针指向前一个节点。最后返回新的头节点。接下来,定义了一个辅助函数printList用于打印链表的值。在主函数中,创建了一个包含5个节点的链表,然后分别打印原链表和反转后的链表。运行程序,输出结果如下:\n\nOriginal list: 1 2 3 4 5\nReversed list: 5 4 3 2 1\n\n代码优化建议\n\n* 为了提高代码的可读性和可维护性,可以使用更清晰的变量命名。\n* 可以添加注释来解释代码的逻辑,方便他人理解。\n* 可以添加单元测试来验证代码的正确性。\n\n总结\n\n本文介绍了用 C++ 编写的递归链表反转示例代码,并提供了详细的解释和优化建议。希望本文能够帮助您更好地理解链表反转算法。
原文地址: https://www.cveoy.top/t/topic/pKVd 著作权归作者所有。请勿转载和采集!