用C语言编写:输入若干个正整数(输入-1 为结束标志)建立一个单向链表,头指针为 h,输出链表中奇数值的结点。试编写相应程序。
时间: 2024-03-07 14:48:21 浏览: 71
C语言写的带有头结点的链表
好的,以下是用 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()` 函数释放内存。
阅读全文