📅  最后修改于: 2023-12-03 14:40:26.960000             🧑  作者: Mango
在C程序中,判断给定链表的长度是奇数还是偶数是一个常见的问题。在本文中,我们将介绍如何实现这个功能。
首先,我们需要定义一个链表数据结构,包含两个元素:一个整数值和下一个节点的指针。下面是这个数据结构的定义:
struct Node {
int data;
struct Node* next;
};
为了判断链表的长度是奇数还是偶数,我们需要计算链表中节点的数量。我们可以定义一个函数来实现这个功能,遍历链表,每访问一个节点就将计数器加1。下面是这个函数的实现:
int countNodes(struct Node* head) {
int count = 0;
struct Node* current = head;
while (current != NULL) {
count++;
current = current->next;
}
return count;
}
有了计数链表节点数的函数,我们现在可以判断链表的长度是奇数还是偶数了。根据奇偶性返回不同的值即可。下面是实现这个功能的函数:
int isLinkedListLengthEven(struct Node* head) {
int count = countNodes(head);
return (count % 2 == 0);
}
这个函数使用了之前写的计数链表节点数的函数,通过使用取模运算符来判断链表长度的奇偶性。如果奇偶性是偶数,它将返回1,否则返回0。
下面是完整的示例代码,它定义了一个链表,并使用我们刚刚写的函数判断链表的长度是奇数还是偶数:
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
int countNodes(struct Node* head) {
int count = 0;
struct Node* current = head;
while (current != NULL) {
count++;
current = current->next;
}
return count;
}
int isLinkedListLengthEven(struct Node* head) {
int count = countNodes(head);
return (count % 2 == 0);
}
int main() {
struct Node* head = NULL;
struct Node* second = NULL;
struct Node* third = NULL;
head = (struct Node*)malloc(sizeof(struct Node));
second = (struct Node*)malloc(sizeof(struct Node));
third = (struct Node*)malloc(sizeof(struct Node));
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
int isEven = isLinkedListLengthEven(head);
if (isEven) {
printf("The length of the linked list is even\n");
} else {
printf("The length of the linked list is odd\n");
}
return 0;
}
这个程序创建了一个包含3个节点的链表,并使用isLinkedListLengthEven函数判断链表的长度是奇数还是偶数。程序的输出结果是:
The length of the linked list is odd
在C程序中,判断给定链表的长度是奇数还是偶数是一个常见的问题。我们可以遍历链表并计数节点数来实现这个功能,并使用取模运算符来判断链表长度的奇偶性。