假设线性表采用带头结点的单链表存储,并使用尾插法构造单链表L,请设计算法函数void reverse(LinkList L),将带头结点的单链表L倒置,使其变成 。
时间: 2024-12-13 10:15:39 浏览: 13
利用带头结点的单链表实现两个集合的并、交、差运算.docx
当需要将带头结点的单链表L倒置(reverse)时,可以使用迭代或者递归的方法。这里提供一个使用迭代的算法:
```cpp
// 先定义链表节点结构
struct Node {
int data;
Node* next;
};
// 定义reverse函数
void reverse(LinkList* L) {
if (L == nullptr || L->next == nullptr) { // 如果链表为空或只有一个元素,直接返回
return;
}
Node* prev = nullptr; // 初始化前驱指针
Node* current = L; // 当前指针
while (current != nullptr) { // 遍历整个链表
Node* nextTemp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点的next指向前一个节点
prev = current; // 移动prev到current
current = nextTemp; // 移动current到下一个节点
}
L->next = prev; // 最后,原头节点现在变成了新的尾节点
}
```
这个函数会改变输入链表`L`的指向,使得原来的头节点变为新的尾节点,而原来的尾节点则成为新的头节点。
阅读全文