pta 逆序(函数)
时间: 2025-01-08 16:12:45 浏览: 1
### PTA平台逆序函数实现方法
#### 单链表逆序
对于单链表的逆序操作,可以采用迭代的方法来反转节点之间的指向关系。具体来说,在遍历链表的同时调整当前节点指向前一节点而不是下一节点。
```cpp
struct Node {
int data;
struct Node *next;
};
Node* list_reverse(Node* head) {
Node *prev = nullptr, *curr = head, *next_node;
while (curr != nullptr) {
next_node = curr->next; // Store reference to the rest of the list.
curr->next = prev; // Reverse link direction at current node.
prev = curr; // Move forward along original order.
curr = next_node;
}
return prev; // New head is last non-null 'prev'.
}
```
此段代码实现了`list_reverse()`函数的功能[^1]。
#### 字符串逆序(C++)
针对C++中的字符串逆序问题,可以通过双指针法来进行原地修改。即设置两个索引分别位于字符串两端并向中心靠拢直至相遇为止;每次遇到一对未交换过的字符就互换它们的位置。
```cpp
#include <iostream>
using namespace std;
void reverse_string(string& s){
int left = 0,right=s.size()-1;
while(left<right){
swap(s[left],s[right]);
++left;
--right;
}
}
int main(){
string str="hello";
cout<<str<<"\n"; // Original String
reverse_string(str);
cout<<str<<"\n"; // Reversed String
return 0;
}
```
上述代码展示了如何利用`reverse_string()`函数完成字符串逆转的任务[^2]。
#### 整数逆序输出(递归方式)
当涉及到整数的逆序打印时,可借助于递归来逐位提取并显示数字。这里的关键在于理解十进制数值表示以及除法运算的结果特性——商代表更高一位上的值而余数则对应最低有效位。
```cpp
// Recursive function prototype declaration
void reverse(int n);
void reverse(int n){
if(n>9){ // Base case check
reverse(n/10); // Process higher digits first
}
printf("%d",n%10); // Print least significant digit after recursion returns
}
```
这段程序片段说明了怎样运用递归机制去构建`reverse(int)`函数以达到预期效果[^3]。
#### 原地字符串逆序算法
最后一种情况是在不额外分配空间的前提下对给定字符数组执行翻转操作。这通常适用于不允许调用标准库内建函数的情境下。下面给出了一种基于for循环控制结构下的解决方案:
```cpp
void f(char* p) {
char c;
int i=0,j;
while(p[i]!='\0') i++;
j=i-1;
for(i=0;i<j;i++){
c=p[i];
p[i]=p[j];
p[j]=c;
j--;
}
}
```
以上就是有关PTA平台上几种不同类型的逆序函数的具体实现方案[^4]。
阅读全文