🕺作者: 主页
我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 算法题上机准备 😘欢迎 ❤️关注 👍点赞 🙌收藏 ✍️留言
题目
设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为0(1)。
算法思路
将第一个元素与最后一个进行交换,第二个与倒数第二个交换,依次类推,直到交换表长的一半次即可
题解
//法一
void reverseList(SqList& L) {
int midCount = L.length / 2; //记录应交换的次数
int i = 0;
while (i < midCount) {
//首尾交换元素
int temp = L.data[i];
L.data[i] = L.data[L.length - 1 - i];
L.data[L.length - 1 - i] = temp;
i++;
}
}
//法二
void reverseList2(SqList& L) {
int low = 0, high = L.length - 1;//当前两个"指针"分别指向第一个元素和最后一个元素
//当前半部分指针和下半部分指针没有相遇时交换low指针和high指针所指向的元素
while (low < high) {
int temp = L.data[low];
L.data[low] = L.data[high];
L.data[high] = temp;
low++;
high--;
}
}