用c++编写一个将整条链表翻转过来的小程序。任务: 编写一个程序,建立一个能存放int型数据的链表; 设计一个函数reverse实现将这条链表逆转过来,即将原来的表头变成表尾,原来的表尾变成表头; 在主函数中实现: 用户输入链表结点个数; 依次输入各结点整数值; 调用函数reverse,然后遍历并打印逆转后的链表结点整数值。 比如: 用户输入"3 7 8 9" (表示链表结点数3,整数值依次是7 8 9),那么程序应该输出"9 8 7" 效果如下: 输入: 3 7 8 9 输出: 9 8 7
时间: 2024-04-17 12:25:59 浏览: 166
两个一元多项式相加的程序
5星 · 资源好评率100%
下面是使用C++编写的将链表翻转的程序:
```cpp
#include <iostream>
// 定义链表节点结构
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 将链表翻转
ListNode* reverse(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
ListNode* next = nullptr;
while (curr != nullptr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
int main() {
int n;
std::cout << "请输入链表节点个数n:";
std::cin >> n;
// 创建链表
ListNode* dummy = new ListNode(-1);
ListNode* curr = dummy;
int val;
std::cout << "请输入链表节点的整数值:";
for (int i = 0; i < n; i++) {
std::cin >> val;
curr->next = new ListNode(val);
curr = curr->next;
}
// 翻转链表
dummy->next = reverse(dummy->next);
// 遍历并打印逆转后的链表结点整数值
curr = dummy->next;
std::cout << "逆转后的链表结点整数值:" << std::endl;
while (curr != nullptr) {
std::cout << curr->val << " ";
curr = curr->next;
}
std::cout << std::endl;
// 释放链表内存
curr = dummy;
while (curr != nullptr) {
ListNode* temp = curr;
curr = curr->next;
delete temp;
}
return 0;
}
```
在这个程序中,我们首先创建了一个带有虚拟头节点(dummy)的链表,并根据用户输入的节点个数和整数值构建了链表。然后,我们调用`reverse`函数来翻转链表,该函数使用迭代方法将链表逆转。最后,我们遍历并打印逆转后的链表节点整数值。
希望这个程序对你有所帮助!如果你有任何其他问题,请随时提问。
阅读全文