单链表就地逆置c++完整代码怎么写
时间: 2024-09-30 17:06:30 浏览: 45
单链表就地逆置的方法
单链表就地逆置(也称为原地反转)是指不需要额外空间的情况下,改变链表节点的链接顺序,使其成为新的反向链表。以下是使用C++编写的简单示例:
```cpp
#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, *nextTemp = nullptr; // 定义三个指针
while (curr != nullptr) { // 遍历链表
nextTemp = curr->next; // 保存当前节点的下一个节点
curr->next = prev; // 将当前节点指向前一个节点
prev = curr; // 更新前一个节点
curr = nextTemp; // 移动到下一个节点
}
return prev; // 返回新头节点
}
// 测试函数
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != nullptr) {
std::cout << temp->val << " -> ";
temp = temp->next;
}
std::cout << "nullptr" << std::endl;
}
int main() {
// 创建一个简单的链表
ListNode* list = new ListNode(1);
list->next = new ListNode(2);
list->next->next = new ListNode(3);
list->next->next->next = new ListNode(4);
std::cout << "Original List:\n";
printList(list);
ListNode* reversedHead = reverseList(list);
std::cout << "\nReversed List:\n";
printList(reversedHead);
return 0;
}
```
这个程序首先创建了一个单链表,然后通过`reverseList`函数将其逆置,最后打印出逆置后的链表。`printList`函数用于遍历并打印链表。
阅读全文