本文主要是介绍【顺序表】02 顺序表逆置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
🕺作者: 主页
我的专栏 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--;}
}
这篇关于【顺序表】02 顺序表逆置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!