📌  相关文章
📜  C程序检查给定链表的长度是偶数还是奇数(1)

📅  最后修改于: 2023-12-03 14:40:26.960000             🧑  作者: Mango

C程序检查给定链表的长度是偶数还是奇数

在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程序中,判断给定链表的长度是奇数还是偶数是一个常见的问题。我们可以遍历链表并计数节点数来实现这个功能,并使用取模运算符来判断链表长度的奇偶性。