编写一个函数Sort(SqList &s),将顺序表中的元素逆置,要求算法的空间复杂度为O(1)。
时间: 2024-09-22 20:04:02 浏览: 33
要编写一个空间复杂度为 O(1) 的函数来逆序一个顺序表(也称为单链表),我们需要在原地修改链表节点的指针,而不是创建新的数据结构。这里假设我们有一个 `SqListNode` 结构体,包含整型值和指向下一个节点的指针。逆序过程可以按照以下步骤进行:
1. 首先,定义两个指针 `prev` 和 `current`,分别初始化为 `NULL` 和 `s->head`。
2. 然后,进入一个循环,条件是 `current` 不为空:
- 创建一个新的临时指针 `next`,存储当前节点 `current` 的下一个节点。
- 更新当前节点 `current` 的 `next` 指针,使其指向 `prev`。
- 将 `prev` 向前移动一位,设置为 `current`。
- 再次将 `current` 设置为 `next`,以便检查下一个节点。
3. 循环结束后,`prev` 就会成为新链表的尾部,原始的头部 `s->head` 现在是新的尾部。所以,最后将链表的头部指针 `s->head` 指向 `prev` 即可。
下面是一个示例的 C 语言实现:
```c
void Sort(SqList &s) {
SqListNode* prev = nullptr;
SqListNode* current = s.head;
while (current != nullptr) {
SqListNode* next = current->next;
current->next = prev;
prev = current;
current = next;
}
s.head = prev;
}
```
阅读全文