编程实现:输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的偶数值结点删除后输出。链表节点定义为: struct Node{ int data; struct Node *next; } 输入输出示例:括号内为说明 输入样例: 1 2 3 4 5 6 7 -1 输出样例: 1 3 5 7 用c语言程序写代码
时间: 2024-03-21 16:41:03 浏览: 32
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
void printList(struct Node* head) {
struct Node* p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void deleteEvenNodes(struct Node** headRef) {
struct Node* prev = NULL;
struct Node* curr = *headRef;
while (curr != NULL) {
if (curr->data % 2 == 0) {
if (prev == NULL) {
*headRef = curr->next;
} else {
prev->next = curr->next;
}
struct Node* temp = curr;
curr = curr->next;
free(temp);
} else {
prev = curr;
curr = curr->next;
}
}
}
int main() {
struct Node* head = NULL;
struct Node* tail = NULL;
int num;
printf("请输入若干个正整数(以-1结束):");
while (scanf("%d", &num) == 1 && num != -1) {
struct Node* p = (struct Node*) malloc(sizeof(struct Node));
p->data = num;
p->next = NULL;
if (head == NULL) {
head = p;
tail = p;
} else {
tail->next = p;
tail = p;
}
}
printf("删除偶数节点前的链表:");
printList(head);
deleteEvenNodes(&head);
printf("删除偶数节点后的链表:");
printList(head);
return 0;
}
```