编写程序,输入一个包含若干正整数的列表,输出其中的奇数组成的新列表
时间: 2023-11-29 15:01:32 浏览: 101
这是一个Python的示例代码:
```python
# 输入列表
num_list = input("请输入一个包含若干正整数的列表,用空格分隔:").split()
# 转换为整型列表
num_list = [int(num) for num in num_list]
# 生成奇数列表
odd_list = [num for num in num_list if num % 2 == 1]
# 输出奇数列表
print("奇数组成的新列表为:", odd_list)
```
这里的`input()`函数用于接收用户输入,`split()`方法用于将输入的字符串按空格分隔成多个字符串,并返回一个列表。接着,使用了列表推导式将输入列表中的每个字符串转换为整型,并生成一个新的整型列表。最后,使用列表推导式生成一个奇数列表,即只包含输入列表中的奇数元素,然后输出这个奇数列表。
相关问题
用C语言,奇数值结点链表:输入若干正整数(输入-1为结束标志),建立一个单向链表,头指针为L,将链表L中奇数值的结点重新组成一个新的链表NEW,并输出新建链表的信息。试编写相应程序。
以下是用C语言编写的奇数值结点链表程序:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
Node *create_list() {
int val;
Node *head = NULL, *tail = NULL;
printf("请输入若干正整数,以-1结束:\n");
while (scanf("%d", &val) == 1 && val != -1) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = val;
node->next = NULL;
if (head == NULL) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
Node *separate_list(Node **head) {
Node *cur = *head, *prev = NULL, *new_head = NULL, *new_tail = NULL;
while (cur != NULL) {
if (cur->data % 2 != 0) {
if (prev == NULL) {
*head = cur->next;
} else {
prev->next = cur->next;
}
if (new_head == NULL) {
new_head = new_tail = cur;
} else {
new_tail->next = cur;
new_tail = cur;
}
cur = cur->next;
new_tail->next = NULL;
} else {
prev = cur;
cur = cur->next;
}
}
return new_head;
}
void print_list(Node *head) {
printf("链表的信息为:");
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node *L = create_list();
Node *NEW = separate_list(&L);
print_list(L);
print_list(NEW);
return 0;
}
```
程序先定义了一个结构体 `node`,表示链表的结点,包含一个整数 `data` 和一个指向下一个结点的指针 `next`。然后定义了一个函数 `create_list`,用于创建一个单向链表。函数中使用一个循环,读取用户输入的正整数并创建结点,将结点插入链表的尾部。当用户输入 -1 时,循环结束,返回链表的头指针。
接下来是函数 `separate_list`,用于从链表中分离出所有奇数值的结点,并返回一个新的链表。函数中使用了两个指针 `cur` 和 `prev`,分别表示当前结点和前一个结点。如果当前结点的值为奇数,就将其从链表中删除,并将其插入到新链表的尾部。否则,将指针 `cur` 和 `prev` 分别向后移动一个结点。最后返回新链表的头指针。
最后是主函数 `main`,先调用函数 `create_list` 创建链表,再调用函数 `separate_list` 分离出所有奇数值的结点,分别输出原链表和新链表的内容。
用C语言编写:输入若干个正整数(输入-1 为结束标志)建立一个单向链表,头指针为 h,输出链表中奇数值的结点。试编写相应程序。
好的,以下是用 C 语言编写的程序,实现您的要求:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int val;
struct Node* next;
};
int main() {
struct Node* head = NULL;
struct Node* tail = NULL;
// 循环读入并建立链表
int num;
printf("请输入若干个正整数,以-1作为结束标志:\n");
scanf("%d", &num);
while (num != -1) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->val = num;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
scanf("%d", &num);
}
// 遍历链表,输出奇数
struct Node* p = head;
printf("奇数结点的值为:\n");
while (p != NULL) {
if (p->val % 2 == 1) {
printf("%d\n", p->val);
}
p = p->next;
}
// 释放链表结点的内存
p = head;
while (p != NULL) {
struct Node* tmp = p;
p = p->next;
free(tmp);
}
head = NULL;
tail = NULL;
return 0;
}
```
上述程序中,我们同样定义了一个结构体 `Node`,表示链表中的一个结点。然后定义了链表的头指针 `head` 和尾指针 `tail`,用来动态地建立链表。程序通过循环读入若干个正整数,每读入一个数就创建一个新的结点,并将其加入链表中。最后,程序遍历链表,输出其中奇数值的结点。
注意,在程序最后,我们同样需要释放链表结点的内存,避免内存泄漏。这里采用了一个简单的方法,即遍历链表,逐个删除每个结点。需要注意的是,C语言中需要使用 `malloc()` 函数动态分配内存,使用 `free()` 函数释放内存。
阅读全文