下面是一个用C++编写的反转链表的示例代码:
#include <iostream>
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* reverseList(ListNode* head) {
if (head == nullptr || head->next == nullptr)
return head;
ListNode *prev = nullptr, *curr = head, *nextNode = nullptr;
while (curr != nullptr) {
nextNode = curr->next; // 保存当前节点的下一个节点
curr->next = prev; // 当前节点指向前一个节点
prev = curr; // 前一个节点更新为当前节点
curr = nextNode; // 当前节点更新为下一个节点
}
return prev; // 返回新的头结点
}
void printList(ListNode* head) {
ListNode* node = head;
while (node != nullptr) {
std::cout << node->val << " ";
node = node->next;
}
std::cout << std::endl;
}
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
std::cout << "Original List: ";
printList(head);
head=reverseList(head);
std::cout << "Reversed List: ";
printList(head);
return 0;
}
这段代码定义了一个ListNode
结构,包含一个整数值和指向下一个节点的指针。reverseList()
函数通过迭代方式反转链表,最后返回新的头节点。printList()
函数用于打印链表的值。
在main()
函数中,创建一个包含4个节点的链表,并首先打印原始链表,然后调用reverseList()
函数反转链表,并最终再次打印反转后的链表。
内容由零声教学AI助手提供,问题来源于学员提问