编写一个把有n个元素的数组a中的元素就地逆置的函数。所谓就地逆置,就是逆置后的
时间: 2023-04-10 14:03:16 浏览: 74
结果直接存储在原数组a中,不需要额外的空间。
答案:可以使用双指针的方法,从数组的两端开始交换元素,直到两个指针相遇。具体代码如下:
void reverse(int a[], int n) {
int i = 0, j = n - 1;
while (i < j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
相关问题
编写一个把有 n 个元素的数组 a 中的元素就地逆置的函数,所谓就地逆置就 是逆置后的元素还保存在数组 a 中。并设计一个测试主函数进行测试。
可以使用以下代码实现:
```lua
function reverseArray(a)
local n = #a
for i = 1, math.floor(n / 2) do
local j = n - i + 1
a[i], a[j] = a[j], a[i]
end
end
function testReverseArray()
local a = {1, 2, 3, 4, 5}
reverseArray(a)
assert(a[1] == 5)
assert(a[2] == 4)
assert(a[3] == 3)
assert(a[4] == 2)
assert(a[5] == 1)
local b = {1, 2, 3, 4}
reverseArray(b)
assert(b[1] == 4)
assert(b[2] == 3)
assert(b[3] == 2)
assert(b[4] == 1)
end
```
测试主函数 testReverseArray() 可以用来测试 reverseArray() 函数是否正确。
编写一个函数,实现单链表就地逆置
好的,以下是实现单链表就地逆置的函数代码:
```c
void reverseList(Node* head) {
Node* prev = NULL;
Node* curr = head;
Node* next = NULL;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
```
这个函数会将传入的单链表就地逆置,也就是将链表中的每个节点的 next 指针指向它的前一个节点,最后返回逆置后的链表头节点。