用头插法的算法思想,实现单链表的就地逆置(要求在原链表上进行)。
时间: 2024-09-22 08:01:53 浏览: 43
头插法的算法思想通常用于解决链表操作的问题,特别是需要对链表结构进行某种形式反转的情况。对于单链表的就地逆置,意味着我们不需要创建一个新的链表,而是直接修改原来的链表结构,使其节点顺序反向。
以下是使用头插法的步骤来实现单链表的就地逆置:
1. **初始化临时指针**:创建两个指针,一个指向当前节点(`prev`),另一个指向下一个节点(`curr`),初始都设为`NULL`。
2. **遍历链表**:当`curr`不为空时,继续循环。
- **交换节点位置**:将`curr`的下一个节点`next`设置为`prev`,即`curr->next = prev`。
- **移动指针**:然后更新`prev`为`curr`,`curr`为`curr->next`,向前移动到下一个节点。
3. **结束条件**:当`curr`变为`NULL`时,说明已经到达了链表的末尾。此时`prev`应该指向新的头节点,所以将原链表的头节点设置为`prev`。
4. **返回新头**:最后返回`prev`作为新的头结点,完成了链表的逆置。
```cpp
void reverseList(Node** head) {
Node* prev = nullptr;
Node* curr = *head;
while (curr != nullptr) {
Node* nextTemp = curr->next; // 保存当前节点的下一个节点
curr->next = prev; // 将当前节点的next指向前一个节点
prev = curr; // 更新前一个节点为当前节点
curr = nextTemp; // 移动当前节点到下一个
}
*head = prev; // 新头节点为原尾节点
}
```
阅读全文