实现一个高效算法,将顺序表L的所有元素逆置,要求空间复杂度为O(1)
本题来自王道数据结构2023顺序表中的综合应用题的第三题,题中要求反转一个顺序表,并要求空间复杂度为O(1)
分析:
由于有空间复杂度的约束,所以我们不能简单的重现new一个链表,然后使用头插法去创建。因此为了解决问题很自然想到了双指针,通过前后对比来轻松实现顺序表的反转
//定义一个顺序表
typedef struct {
ElementType *elem;
int length;
} sqList;
bool ReverseList(sqList &L) {
if (L.length == 0)
return false;
//不管原来有多少个元素,我们都只需要交换len/2次,剩余的元素会恰好留在中间
for (int i = 0; i < L.length / 2; ++i) {
int temp = L.elem[i];
//与对应的后半部的元素互换
L.elem[i] = L.elem[L.length - i - 1];
L.elem[L.length - i - 1] = temp;
}
return true;
}