实验三: 有一个带头结点的双链表 L,设计一个算法将其所有元素逆置, 即第一个元素变为最后一个元素,第 2 个元素变为倒数第 2 个元 素,最后一个元素变为第 1 个元素。(课本例题 2.9)
时间: 2024-03-06 16:46:19 浏览: 152
写一个算法将一单链表逆置。要求操作在原链表上进行。
算法如下:
1. 定义三个指针,分别指向当前节点、前驱节点和后继节点。
2. 将当前节点的后继节点指向前驱节点,前驱节点指向当前节点,当前节点指向后继节点。
3. 将前驱节点作为当前节点,后继节点作为下一个节点,重复步骤 2 直到遍历完整个链表。
4. 最后将头结点的后继节点和前驱节点交换,完成链表逆置。
代码实现如下(假设头结点为 head):
```
// 定义三个指针
Node *pre = head, *cur = head->next, *next = nullptr;
// 将头结点的后继节点置为 nullptr,防止出现环
head->next = nullptr;
// 遍历链表并逆置
while (cur != nullptr) {
// 获取当前节点的后继节点
next = cur->next;
// 将当前节点的后继节点指向前驱节点
cur->next = pre;
// 将前驱节点指向当前节点
pre->prev = cur;
// 将前驱节点作为当前节点
pre = cur;
// 将后继节点作为下一个节点
cur = next;
}
// 将头结点的后继节点和前驱节点交换
head->prev = pre;
pre->next = head;
head = pre;
```
阅读全文