有一个带头结点的单链表,头指针为 head ,编写一个算法 count . list ()计算所有数据域为 X 的结点的个数(不包括头结点)。 请给出代码并附上运行结果用c语言写代码
时间: 2024-10-01 15:10:55 浏览: 32
在C语言中,你可以通过遍历链表的方式来解决这个问题。首先,你需要定义一个结构体表示链表节点,假设它名为ListNode,并包含一个整型值`val`和指向下一个节点的指针`next`。下面是一个简单的示例函数,它接受链表头节点作为输入,然后返回值为X的节点的数量:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 函数声明
int countList(ListNode* head, int X);
// 创建一个链表节点
ListNode* createNode(int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 主函数示例
int main() {
// 创建一个链表示例
ListNode* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(X); // 假设X为4
int count = countList(head, 4);
printf("Number of nodes with value %d: %d\n", X, count);
return 0;
}
// 计算值为X的节点数量
int countList(ListNode* head, int X) {
int count = 0;
ListNode* current = head->next; // 跳过头节点
while (current != NULL) {
if (current->val == X) {
count++;
}
current = current->next;
}
return count;
}
```
在这个例子中,如果X的值是4,`countList`将返回3,因为有三个节点的值是4。
阅读全文