输入n个数,创建列表,然后把这n个数逆序输出。 输入格式: 输入n(n<=40)个整数。 输出格式: 逆序输出n个数,每两个数据之间留一个空格。
时间: 2024-02-15 11:05:12 浏览: 25
好的,这是一个非常简单的问题,可以使用 Python 语言轻松解决。下面是代码实现:
```python
n = int(input())
nums = list(map(int, input().split()))
nums.reverse() # 将列表逆序
print(" ".join(map(str, nums))) # 将逆序后的列表转换成字符串输出
```
输入示例:
```
5
1 2 3 4 5
```
输出示例:
```
5 4 3 2 1
```
请注意,这里使用了 `map` 函数将输入的字符串类型的数字转换成了整型数字,也使用了 `join` 函数将逆序后的整型数字列表转换成了字符串输出。如果您对这些函数不熟悉,可以自行学习一下。
相关问题
输入n个数,创建列表,然后把这n个数逆序输出。 输入格式: 输入n(n<=40)个整数。 输出格式: 逆序输出n个数,每两个数据之间留一个空格。
好的,这个问题可以用Python语言来解决。以下是代码实现:
```python
n = int(input()) # 输入n个数
nums = input().split() # 将输入的一行数以空格分隔,存入列表中
nums.reverse() # 列表翻转
print(" ".join(nums)) # 以空格为分隔符,输出翻转后的列表
```
输入示例:
```
5
1 2 3 4 5
```
输出示例:
```
5 4 3 2 1
```
注意事项:
- 输入的n个数以空格分隔
- 输出时每两个数之间留一个空格
- 列表翻转用到了reverse()方法
- 输出时用join()方法将列表中的元素以空格连接成一个字符串
c语言实现编程实现:输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算: 输入一个正整数 n(0<n<=9)和一组(n个)整数,建立一个单向链表,再输入一个整数 x,将链表中最后一个与x相等的整数删除。 输入输出示例:括号内为说明 输入样例: 3 (repeat=3) 5 (数据的个数n=5) 1 2 4 3 7 (5个整数) 4 (待删除整数x=4) 5 (数据的个数n=5) 2 1 5 7 5 (5个整数) 5 (待删除整数x=5) 3 (数据的个数n=3) 1 2 4 (3个整数) 100 (待删除整数x=100) 输出样例: size=4:1 2 3 7 size=4:2 1 5 7 size=3:1 2 4
以下是 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* deleteLastEqual(ListNode* head, int x) {
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode));
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
ListNode* last_node = NULL;
while (curr) {
if (curr->val == x) {
last_node = curr;
}
prev->next = curr;
prev = curr;
curr = curr->next;
}
if (last_node) {
prev->next = last_node->next;
}
return dummy->next;
}
void printList(ListNode* head) {
int size = 0;
int* nums = (int*)malloc(sizeof(int) * 10);
while (head) {
nums[size++] = head->val;
head = head->next;
}
printf("size=%d:", size);
for (int i = size - 1; i >= 0; i--) {
printf("%d ", nums[i]);
}
printf("\n");
free(nums);
}
int main() {
int repeat;
scanf("%d", &repeat);
for (int i = 0; i < repeat; i++) {
int n;
scanf("%d", &n);
ListNode* head = NULL;
for (int j = 0; j < n; j++) {
int val;
scanf("%d", &val);
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = val;
node->next = head;
head = node;
}
int x;
scanf("%d", &x);
head = deleteLastEqual(head, x);
printList(head);
ListNode* curr = head;
while (curr) {
ListNode* temp = curr;
curr = curr->next;
free(temp);
}
}
return 0;
}
```
思路解析:
这个问题可以通过创建一个虚拟头节点 dummy,将它指向链表的头节点 head。然后用 prev 和 curr 指针遍历链表,prev 始终指向 curr 的前一个节点,curr 指向当前节点。如果 curr->val 等于 x,则将 last_node 指向 curr,表示找到与 x 相等的节点。遍历完后,如果 last_node 不为空,则删除 last_node 节点。
在构造链表时,我们需要不断地从输入中读取整数,每读一个整数就创建一个新的节点,并将它插入到链表的头部。最后得到的链表是逆序的。遍历链表,统计链表长度和节点值,最后输出即可。
需要注意的是,在释放链表节点的内存时,我们需要先遍历整个链表,将指针指向下一个节点,然后才能释放当前节点的内存。
时间复杂度分析:
遍历链表需要 O(n) 的时间复杂度,构造链表需要 O(n) 的时间复杂度,因此总的时间复杂度为 O(n)。
阅读全文