设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。用C++写
时间: 2024-10-15 09:26:56 浏览: 32
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
设计一个算法反转单链表,可以采用迭代的方式来实现,不需要使用额外的空间。这里是一个简单的C++实现:
```cpp
class ListNode {
public:
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr; // 初始化前驱节点为NULL
ListNode* curr = head; // 初始化当前节点为头节点
// 只要还有下一个节点,循环进行
while (curr != nullptr) {
// 存储当前节点的下一个节点
ListNode* nextTemp = curr->next;
// 将当前节点的next指向前驱节点
curr->next = prev;
// 指针前移
prev = curr;
curr = nextTemp;
}
// 返回新的头节点(实际上是原链表的尾节点)
return prev;
}
```
在这个算法中,我们从头节点开始,每次迭代都将当前节点的`next`指向前一个节点,然后前进到下一个未处理的节点。当所有节点都处理完毕后,原来的尾节点变成了新的头节点,实现了链表的反转。
阅读全文