cpp单链表的倒置,不引入额外的空间复杂度
时间: 2024-09-19 10:13:32 浏览: 32
不带头节点的单链表倒置算法
在 C++ 中,如果你想要反转一个单链表而不引入额外的空间复杂度,你可以采用迭代(Iteration)的方式实现,这通常涉及到三个指针,一个指向当前节点,一个指向前一个节点,另一个用于存储下一个节点。以下是步骤:
1. 定义一个临时变量 `prev` 初始化为 NULL,表示无前驱节点。
2. 定义一个指针 `current` 指向链表的头结点。
3. 当 `current` 不为空时,执行以下操作:
- 将 `current->next` 的值保存到 `temp` 中(即保存下一个节点的地址)。
- 更新 `current->next` 为 `prev`,完成一次反转。
- 移动指针,让 `prev` 成为 `current`,`current` 成为 `temp`。
4. 继续这个过程直到 `current` 变为 NULL。
5. 最后,将头结点设置为原头结点的下一个节点,即 `temp`(现在它指向反转后的链表的第一个节点)。
```cpp
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* current = head;
while (current != nullptr) {
ListNode* temp = current->next;
current->next = prev;
prev = current;
current = temp;
}
return prev; // 返回新的头结点
}
```
阅读全文