编程实现:输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的偶数值结点删除后输出。链表节点定义为: struct Node{ int data; struct Node *next; } 输入输出示例:括号内为说明 输入样例: 1 2 3 4 5 6 7 -1 输出样例: 1 3 5 7 用c语言程序写代码 按照输入和输出要求写
时间: 2024-03-26 07:40:11 浏览: 52
c语言实现链表的基本操作,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
以下是一个可能的实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
void print_list(struct Node *head) {
struct Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void delete_even_nodes(struct Node **head) {
struct Node *p = *head;
struct Node *prev = NULL;
while (p != NULL) {
if ((p->data) % 2 == 0) {
if (prev != NULL) {
prev->next = p->next;
} else {
*head = p->next;
}
struct Node *temp = p;
p = p->next;
free(temp);
} else {
prev = p;
p = p->next;
}
}
}
int main() {
int x;
struct Node *head = NULL;
struct Node *tail = NULL;
scanf("%d", &x);
while (x != -1) {
struct Node *temp = (struct Node *) malloc(sizeof(struct Node));
temp->data = x;
temp->next = NULL;
if (tail == NULL) {
head = temp;
tail = temp;
} else {
tail->next = temp;
tail = temp;
}
scanf("%d", &x);
}
delete_even_nodes(&head);
print_list(head);
return 0;
}
```
程序先定义了一个结构体 `Node`,表示链表的结点。然后实现了两个函数:
- `print_list`:用于打印链表的所有结点的数据。
- `delete_even_nodes`:用于删除链表中所有值为偶数的结点。
主函数中首先定义了一个指向链表头部的指针 `head` 和一个指向链表尾部的指针 `tail`,并初始化为 `NULL`。然后程序通过循环读取输入,创建新的结点,并将其加入到链表中。当读入 `-1` 时,输入结束。接着调用 `delete_even_nodes` 函数,删除链表中所有值为偶数的结点。最后调用 `print_list` 函数,打印剩余的链表结点的数据。注意,在 `delete_even_nodes` 函数中,使用了一个指向指针的指针 `head`,这是因为如果要删除链表头部的结点,需要改变 `head` 的值,而普通指针无法改变变量的值,只能改变变量所指向的值。
阅读全文