有一个单向链表,头指针为l,结点的数据域是一个整数,将链表l中奇数值的结点重新组成一个新的链表new,并输出新建链表。 输入格式:输入若干个整数,以-1结束输入 输出格式:数值之间以一个空格分隔,最后一个数值后面没有空格
时间: 2023-05-03 10:01:01 浏览: 98
这个问题的意思是有一个单向链表,头指针为l,结点的数据域是一个整数,将链表l中奇数值的结点重新组成一个新的链表new,并输出新建链表。输入格式:输入若干个整数,以-1结尾输入。输出格式:数值之间以一个空格分隔,最后一个数值后面没有空格。
相关问题
输入若干个正整数(输入-1 为结束标志)建立一个单向链表,头指针为 h,输出链表中奇数值的结点。试编写相应程序
好的,以下是使用 C++ 编写的程序:
```
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
int main() {
int x;
ListNode* h, *p;
h = new ListNode(0);
p = h;
cout << "请输入若干个正整数(输入-1 为结束标志):" << endl;
cin >> x;
while (x != -1) {
ListNode* q = new ListNode(x);
p->next = q;
p = q;
cin >> x;
}
cout << "链表中奇数值的结点如下:" << endl;
p = h->next;
while (p != NULL) {
if (p->val % 2 == 1) {
cout << p->val << " ";
}
p = p->next;
}
cout << endl;
return 0;
}
```
程序的思路是:首先定义一个结构体 ListNode 表示链表结点,包含一个整数值 val 和一个指向下一个结点的指针 next。然后定义链表头指针 h 和当前结点指针 p,输入若干个正整数,建立一个单向链表,最后输出链表中奇数值的结点。
用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` 分离出所有奇数值的结点,分别输出原链表和新链表的内容。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)