用c++写一个反转链表
时间: 2024-02-18 12:33:05 浏览: 80
以下是使用C++实现反转一个单向链表的代码:
```c++
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL;
ListNode* curr = head;
while (curr != NULL) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
int main() {
// 创建链表 1 -> 2 -> 3 -> 4 -> 5
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
head->next->next->next->next = new ListNode(5);
// 反转链表
ListNode* newHead = reverseList(head);
// 输出反转后的链表
while (newHead != NULL) {
cout << newHead->val << " ";
newHead = newHead->next;
}
cout << endl;
return 0;
}
```
在上面的代码中,我们首先定义了一个链表节点的结构体 `ListNode`,包括一个值域 `val` 和一个指向下一个节点的指针 `next`。然后,我们定义了一个 `reverseList()` 函数来反转链表。函数中使用了三个指针,分别为 `prev`、`curr` 和 `next`,其中 `prev` 表示当前节点的前一个节点,`curr` 表示当前节点,`next` 表示当前节点的下一个节点。
在 `while` 循环中,我们首先将 `curr` 的下一个节点保存到 `next` 中,然后将 `curr` 的 `next` 指针指向 `prev`,最后将 `prev` 指向 `curr`,`curr` 指向 `next`。这样,我们就完成了一次节点的反转。循环直到 `curr` 为 `NULL`,即链表处理完毕,返回 `prev`,即为反转后的头节点。
在 `main()` 函数中,我们创建了一个链表 `1 -> 2 -> 3 -> 4 -> 5`,然后调用 `reverseList()` 函数来反转链表。最后,我们输出反转后的链表。输出结果为 `5 4 3 2 1`。
阅读全文