链表如何反转,c++
时间: 2024-09-06 19:07:38 浏览: 37
在C++中,反转链表通常涉及到遍历链表并对每个节点的指针进行重新指向,使其指向前一个节点。这个过程会持续到链表的末尾,从而实现链表的反转。下面是一个简单的示例,演示如何反转单向链表:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* reverseList(ListNode* head) {
ListNode *prev = nullptr;
ListNode *current = head;
ListNode *next = nullptr;
while (current != nullptr) {
next = current->next; // 保存下一个节点
current->next = prev; // 将当前节点的指针反转
prev = current; // 移动prev到当前节点
current = next; // 移动到下一个节点
}
return prev; // prev将指向新的头节点
}
```
在这个函数中,我们使用三个指针:`prev`(指向已反转部分的最后一个节点),`current`(当前正在访问的节点),以及`next`(用于临时存储下一个节点的指针)。我们逐个遍历链表,反转`current`的`next`指针,然后移动`prev`和`current`指针到下一个节点。当`current`为空时,`prev`将指向新的头节点。
阅读全文