设计一个算法,逆置单链表对象L中的所有结点
时间: 2024-10-20 14:07:03 浏览: 25
数据结构单链表、双链表的逆置算法.doc
要设计一个算法来逆置单链表(List)中的所有节点,你可以使用迭代或递归的方法。这里我给你介绍一个简单的迭代方法:
```cpp
struct ListNode {
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; // 保存当前节点的下一个节点
curr->next = prev; // 将当前节点的next指向前驱
prev = curr; // 更新前驱指针
curr = nextTemp; // 移动到下一个节点
}
return prev; // 返回新的头结点,即原链表的尾部
}
```
这个算法的工作原理是,每次迭代时,我们都会把当前节点的`next`指向前一个已经处理过的节点,然后移动`prev`和`curr`指针。当遍历结束时,`prev`将成为新的头结点,因为所有的节点都已经链接到了它后面。
阅读全文