输入一串数字,构造链表并反转该链表,遍历并输出反转后的链表。本题不使用链表不得分。 输入 共1行,依次表示链表存储的整型数字。保证至少有一个数字。 输出 依此反转后的链表每个节点的值。c++实现
时间: 2024-06-20 22:00:42 浏览: 97
在C++中,你可以使用迭代的方式来构建链表并反转它。首先,你需要创建一个结构体或类来表示链表节点,然后定义一个`ListNode`类,包含一个整数值和指向下一个节点的指针。这里是一个简单的C++实现步骤:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {} // 构造函数
};
// 反转链表函数
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr; // 前驱节点
ListNode* curr = head; // 当前节点
while (curr != nullptr) {
ListNode* nextTemp = curr->next; // 保存当前节点的下一个节点
curr->next = prev; // 将当前节点的next指向前驱
prev = curr; // 更新前驱节点
curr = nextTemp; // 移动到下一个节点
}
return prev; // 返回新的头节点
}
// 遍历并输出反转后的链表
void printList(ListNode* head) {
ListNode* curr = head;
while (curr != nullptr) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
int main() {
string input;
getline(cin, input); // 从输入读取一串数字,假设用空格分隔
istringstream iss(input);
int val;
ListNode* head = new ListNode(0); // 创建一个初始的空头节点
while (iss >> val) {
head->next = new ListNode(val);
head = head->next;
}
// 反转链表
head = reverseList(head);
// 输出反转后的链表
printList(head);
// 释放内存
ListNode* temp = head;
while (temp != nullptr) {
ListNode* next = temp->next;
delete temp;
temp = next;
}
return 0;
}
```
在这个程序中,我们首先从输入读取数字,然后创建链表。接着调用`reverseList`函数反转链表,最后调用`printList`函数输出结果。记得在使用完链表后释放动态分配的内存,以避免内存泄漏。
阅读全文