输入若干个不超过100的整数,建立单链表,然后将链表中所有结点的链接方向逆置,要求仍利用原表的存储空间。输出逆置后的单链表。 输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据在一行上输入数据个数n及n个不超过100的整数。 输出格式: 对于每组测试,输出逆置后的单链表,每两个数据之间留一个空格。
时间: 2024-02-18 20:01:07 浏览: 74
好的,这是一个简单的链表题目。我会尝试解答你的问题。
首先,我们需要定义链表节点的结构体:
```
struct ListNode {
int val;
ListNode* next;
};
```
然后,我们可以编写一个函数来构建单链表:
```
ListNode* buildList(vector<int>& nums) {
ListNode* head = new ListNode();
ListNode* cur = head;
for (int i = 0; i < nums.size(); i++) {
cur->next = new ListNode();
cur = cur->next;
cur->val = nums[i];
}
return head->next;
}
```
这个函数的输入是一个整数数组,输出是一个单链表的头节点。
接下来,我们可以编写一个函数来将链表反转:
```
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* cur = head;
while (cur != nullptr) {
ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
```
这个函数的输入是单链表的头节点,输出是反转后的单链表的头节点。
最后,我们可以在主函数中读取输入,构建链表,反转链表,输出链表:
```
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
ListNode* head = buildList(nums);
head = reverseList(head);
while (head != nullptr) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
return 0;
}
```
完整代码如下:
阅读全文