设计一个算法,利用单链表原来的结点空间将一个单链表就地逆转的主函数
时间: 2024-02-15 16:02:02 浏览: 88
对单链表实现就地逆置算法
4星 · 用户满意度95%
实现单链表就地逆转的算法可以采用三个指针来实现,依次将每个节点的 next 指针反转指向前一个节点即可。
具体实现如下:
```cpp
void reverseList(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return;
}
ListNode* prev = nullptr;
ListNode* curr = head;
ListNode* next = head->next;
while (next != nullptr) {
curr->next = prev;
prev = curr;
curr = next;
next = next->next;
}
curr->next = prev;
head->next = nullptr;
head = curr;
}
```
在这个函数中,我们首先检查链表是否为空或只有一个节点,如果是,则直接返回。否则,我们定义三个指针 prev、curr 和 next,分别表示当前节点的前一个、当前和后一个节点。我们不断地循环遍历链表,将 curr 的 next 指针指向 prev,然后将 prev、curr、next 分别向后移动一个节点。当遍历到最后一个节点时,我们需要将 curr 的 next 指针指向 prev,同时将 head 的 next 指针指向空节点,最后将 head 指向 curr,就完成了链表的就地逆转。
阅读全文