编程实现:输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的偶数值结点删除后输出。链表节点定义为: struct Node{ int data; struct Node *next; } 输入输出示例:括号内为说明 用c语言程序写代码
时间: 2024-03-26 19:41:03 浏览: 42
下面是实现该功能的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
struct Node* createNode(int data) {
struct Node *node = (struct Node*)malloc(sizeof(struct Node));
node->data = data;
node->next = NULL;
return node;
}
void deleteEvenNodes(struct Node **head_ref) {
if (*head_ref == NULL) return;
struct Node *prev = NULL, *curr = *head_ref;
while (curr != NULL) {
if (curr->data % 2 == 0) {
if (prev == NULL) {
*head_ref = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
curr = prev == NULL ? *head_ref : prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
}
void printList(struct Node *head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
struct Node *head = NULL, *tail = NULL;
int num;
while (1) {
scanf("%d", &num);
if (num == -1) break;
if (head == NULL) {
head = tail = createNode(num);
} else {
tail->next = createNode(num);
tail = tail->next;
}
}
deleteEvenNodes(&head);
printList(head);
return 0;
}
```
代码中,我们使用了一个结构体 `Node` 表示链表节点,其中包含一个 `data` 成员表示节点的值,还有一个 `next` 成员表示下一个节点的指针。我们通过 `createNode` 函数创建一个新的节点,并初始化 `data` 和 `next` 成员。
我们还定义了一个 `deleteEvenNodes` 函数,该函数用于删除链表中所有偶数节点。该函数接受一个头指针的指针作为参数,因为在删除头节点时需要改变头指针的指向。该函数使用两个指针 `prev` 和 `curr` 来遍历链表,如果当前节点的值为偶数,则删除该节点,并将 `prev` 指针指向当前节点的前一个节点(如果当前节点为头节点,则将头指针指向下一个节点)。如果当前节点的值为奇数,则将 `prev` 指针指向当前节点,并将 `curr` 指针指向下一个节点。
最后,我们使用 `printList` 函数输出链表中剩余的节点。在主函数中,我们通过循环读入若干个正整数,并创建一个链表。读到 `-1` 时停止循环,然后调用 `deleteEvenNodes` 函数删除偶数节点,最后调用 `printList` 函数输出链表中剩余的节点。
阅读全文