假设有一个带头结点的单链表L=(1,2,…,n)。设计一个算法将所有结点逆置,即:L=(n,n-1,…,1)。(需要用到单链表的各种基本运算)
时间: 2024-11-13 15:23:26 浏览: 1
给定一个不带头结点的单链表,写出将链表倒置的算法
5星 · 资源好评率100%
为了反转一个带头结点的单链表L,我们可以使用迭代或递归的方式来实现这个操作。这里给出的是迭代的方式:
```cpp
void reverseList(Node* &head) {
Node* prev = nullptr; // 存储当前节点的前一个节点
Node* curr = head; // 当前遍历的节点
// 通过循环,遍历整个链表
while (curr != nullptr) {
// 将当前节点的下一个节点保存起来,以便后续恢复
Node* nextTemp = curr->next;
// 反转当前节点的指向
curr->next = prev;
// 移动prev和curr
prev = curr;
curr = nextTemp;
}
// 最后把原头节点设为新的头节点
head = prev;
}
```
在这个算法中,我们利用了三个指针prev、curr和nextTemp,prev初始化为nullptr,curr初始化为头节点。在每次迭代中,我们将curr的next指向前一个节点prev,然后移动prev和curr指针。当curr变为nullptr时,说明已经遍历到了链表的末尾,此时prev就是新的头节点。
在`main()`函数中,你可以这样调用这个函数:
```cpp
reverseList(head);
printList(head); // 输出逆置后的链表
```
阅读全文