试分别以顺序表和单链表作存储结构,各编写一个实现线性表就地逆置的算法
时间: 2024-09-19 19:17:43 浏览: 69
顺序表就地逆置
顺序表的就地逆置(即不需要额外空间)可以使用两个指针交换的方式来实现,从头和尾开始双向推进。以下是C++的实现:
```cpp
void reverse_seq_list(SeqList& list) {
int start = 0; // 指向第一个元素
int end = list.size() - 1; // 指向最后一个元素
while (start < end) {
std::swap(list[start], list[end]);
start++;
end--;
}
}
```
这里假设`SeqList`是一个自定义的顺序表类型,包含一个`size()`函数获取当前元素个数以及`swap`方法用于交换元素。
对于单链表,由于单链表无法直接访问其前驱节点,我们需要临时创建一个新的链表来实现逆置。以下是C++的链表版本:
```cpp
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
void reverse_link_list(ListNode*& head) {
ListNode* prev = nullptr;
ListNode* curr = head;
ListNode* nextTemp;
while (curr != nullptr) {
nextTemp = curr->next;
curr->next = prev;
prev = curr;
curr = nextTemp;
}
head = prev;
}
```
这个函数接受链表头指针,并通过不断更新`prev`, `curr`和`nextTemp`指向,实现了链表的逆置。
阅读全文