题目描述 现有n � 个结点(编号为从1到n),以及链表的第一个结点的编号,求这条链表上的结点个数。 输入描述 第一行两个整数n � 、first � � � � � (1≤first≤n≤100 1 ≤ � � � � � ≤ � ≤ 100 ),分别表示结点的个数、链表第一个结点的编号; 接下来n � 行,每行给出一个结点的信息: id data next 其中整数id � � (1≤id≤n 1 ≤ � � ≤ � )表示结点的编号(每个id � � 只出现一次,顺序不定),整数data � � � � (1≤data≤103 1 ≤ � � � � ≤ 10 3 )表示结点的数据域,整数next � � � � (1≤next≤n 1 ≤ � � � � ≤ � 或next=−1 � � � � = − 1 )表示当前结点指向的结点编号(其中next=−1 � � � � = − 1 表示NULL)。 输出描述 输出一个整数,表示链表上的结点个数。用C语言
时间: 2024-03-23 10:38:15 浏览: 62
可以使用一个循环来遍历整个链表,从第一个结点开始,每次找到该结点指向的下一个结点,直到找到指向 NULL 的结点,记录遍历的结点个数即可。
C语言代码如下:
```c
#include <stdio.h>
struct ListNode {
int id;
int data;
int next;
} nodes[100];
int main() {
int n, first, cnt = 0;
scanf("%d %d", &n, &first);
for (int i = 0; i < n; ++i) {
int id, data, next;
scanf("%d %d %d", &id, &data, &next);
nodes[id].id = id;
nodes[id].data = data;
nodes[id].next = next;
}
while (first != -1) {
++cnt;
first = nodes[first].next;
}
printf("%d\n", cnt);
return 0;
}
```
输入格式为:
```
5 3
1 2 4
3 5 -1
4 6 3
2 3 1
5 7 2
```
其中第一行为结点个数和链表第一个结点的编号,接下来的n行为每个结点的信息,分别为编号、数据域和指向的下一个结点的编号。输出为链表上的结点个数,对于以上输入,输出为3。
阅读全文
相关推荐














