①本题其实不难!但重点是区分链表的反转。
1.链表的反转是依靠:快慢双指针(fast、slow)
具体看文章:翻转链表
2.数组的反转是依靠:左右双指针(left、right)
具体看本文章
3.本题不使用reverse函数
使用该函数就会忽略是如何实现反转的!
那我们刷本题其实就没意义了
②左右双指针反转序列
1.动画展示
反转字符串(左右双指针)
2.通过动画其实就知道思路了!
slow>=fast,停止遍历,也不会交换数据
slow<fast,交换数据,slow右移,fast左移。一起遍历。
3.时间复杂度O(n),因为左右指针总共只遍历一次序列!
③代码实现
class Solution {
public:
void reverseString(vector<char>& s) {
//左右指针
int left=0;
int right=s.size()-1;
while(left<right){
swap(s[left++],s[right--]);
}
}
};