13 返回特定数据域的结点个数

1,首先将链表初始值改为用户的输入

2,根据用户的输入,打印出初始化后的链表

3,用户继续输入希望寻找的值

4,根据这个值在链表中寻找数据域是这个值的结点,并计数,最后返回满足条件的结点个数

 1 /*返回特定数据域值的结点个数*/
 2 
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 
 6 //链表中节点的结构
 7 typedef struct Link {
 8     int  data;
 9     struct Link* next;
10 }link;
11 
12 //链表初始化
13 link* initByTailInsert() {
14     link* phead = NULL;//创建头指针
15     link* first_node = (link*)malloc(sizeof(link));//创建第一个节点
16     //第一个结点先初始化
17     first_node->data = 1;
18     first_node->next = NULL;
19     phead = first_node;//头指针指向第一个节点
20 
21     int input_data = 0; //用户输入的值
22 
23     //尾插入赋值
24     printf("请输入4个整数:");
25     for (int i = 2; i < 6; i++) {
26         link* new_node = (link*)malloc(sizeof(link)); //申请新的结点
27 
28         //new_node->data = i;
29         scanf("%d", &input_data);
30         new_node->data = input_data;
31 
32         new_node->next = NULL;
33         first_node->next = new_node;  //第一个结点的指针域指向这个新申请的结点
34         first_node = new_node;  //第一个结点后移
35     }
36 
37     //printf("头指针指向的值是:%d\n", phead->data);//1
38     return phead;  //将指向第一个结点的头指针返回
39 }
40 
41 
42 
43 void showLink(link* phead) {
44     link* tmp = phead;//将头指针赋给tmp,tmp也是一个头指针
45     //只要tmp指针指向的结点的next不是Null,就执行输出语句。
46     while (tmp != NULL) {
47         printf("%d ", tmp->data);
48         tmp = tmp->next;
49     }
50     printf("\n");
51 }
52 
53 //返回特定数据域值的结点个数
54 int count(link* phead, int value) {
55     link* tmp = phead;
56     int count = 0;
57     while (tmp != NULL) {
58         if (tmp->data == value) {
59             count++;
60         }
61         tmp = tmp->next;
62     }
63     return count;
64 }
65 
66 void main() {
67     //初始化链表(1,2,3,4)
68     printf("初始化链表为:\n");
69     link* phead = initByTailInsert(); //创建头指针,得到经过初始化后的头指针
70     showLink(phead);
71     int value = 0;
72     printf("请输入要寻找的元素:");
73     scanf("%d", &value);
74     printf("数据域是%d的结点个数是:%d\n", value,count(phead, value));
75     
76 }

13 返回特定数据域的结点个数

 

 13 返回特定数据域的结点个数

 

上一篇:第62节:探索Java中的网络编程技术


下一篇:剑指offer第56题:删除链表中重复的节点