顺序表
![](https://img.haomeiwen.com/i7186975/f85cf8c2cd783841.png)
![](https://img.haomeiwen.com/i7186975/b8ac048c2ab8d837.png)
![](https://img.haomeiwen.com/i7186975/053f2e190261bbac.png)
![](https://img.haomeiwen.com/i7186975/afa7ea358082fc18.png)
无论是偶数个还是奇数个
都可以是i<j时循环就一直进行下去
否则跳出循环
没有必要分两套代码
一套代码就够了
顺序表的逆置
![](https://img.haomeiwen.com/i7186975/be13a2dec18d4a80.png)
单链表逆置
一般逆置
会从p指针所指结点的后继结点 开始
一直到q指针所指结点 结束 之间的所有结点
![](https://img.haomeiwen.com/i7186975/55a0ba67050f4fa1.png)
![](https://img.haomeiwen.com/i7186975/c2e93443d1309653.png)
![](https://img.haomeiwen.com/i7186975/9b707a0de7be8a82.png)
单链表的逆置
![](https://img.haomeiwen.com/i7186975/f2ed658c591ed8d3.png)
删除结点 但是不free 然后把这个结点插入
到p->next等于q 就结束了
![](https://img.haomeiwen.com/i7186975/18b61f1456105053.png)
顺序表
![](https://img.haomeiwen.com/i7186975/6e00be5124d6162f.png)
![](https://img.haomeiwen.com/i7186975/89a6e957586921d9.png)
![](https://img.haomeiwen.com/i7186975/5ed21bf4850b4a40.png)
让i 扫描 前k个位置 并交换
当k大于 表长的一半的时候
条件 i<j 来约束
否则有些元素多次交换
![](https://img.haomeiwen.com/i7186975/339ec894ce730da2.png)
![](https://img.haomeiwen.com/i7186975/13c7b02db528cfe5.png)
![](https://img.haomeiwen.com/i7186975/1001f5f1891af6bd.png)
![](https://img.haomeiwen.com/i7186975/9a13d0bc825936d5.png)
前k个(0~k-1) 逆置k个
前n个(0~n-1) 逆置k个
逆置两次
![](https://img.haomeiwen.com/i7186975/03b6f5331ca80304.png)
另一种想法 是前k个整体逆置
![](https://img.haomeiwen.com/i7186975/319395a0b11b2af4.png)
本章开头留的题 就可以解决了
![](https://img.haomeiwen.com/i7186975/9e9da4ec08000745.png)
0~p-1元素 逆置p个
p~n-1元素 逆置n-p个
0~n-1元素 逆置n个
![](https://img.haomeiwen.com/i7186975/a2e8a2603936e3d0.png)
![](https://img.haomeiwen.com/i7186975/2f7e01a3c2c8838f.png)
![](https://img.haomeiwen.com/i7186975/aa12abaa4fb76137.png)
![](https://img.haomeiwen.com/i7186975/270d3d99dfd0b0f8.png)
![](https://img.haomeiwen.com/i7186975/fefb7c805777f4af.png)
第一问 思想
先逆置前半段
再逆置后半段
最后逆置整个
第三问
三个并列循环 都是线性级的
时间复杂度 O(n)
在保存序列的数组中折腾
没有额外的存储空间消耗
消耗的空间是常量
数组的空间不变
因此
空间复杂度O(1)
网友评论