【牛客】KiKi学习了结构体和指针

题目链接:https://www.nowcoder.com/practice/0ab593ca56b1476eb05b1ff848fd7fcc?tpId=107&tqId=33419&rp=7&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking&tPage=7

题目描述

KiKi学习了结构体和指针,他了解了结构体类型可以定义包含多个不同类型成员,而指针本质是内存地址,是引用数据的另外一种方式。现在他想将多个输入的数据通过结构体和指针的方式连接在一起,形成一个单向链表,即:每个结点是结构体类型,包括整型数据成员(data)和结构体指针类型成员(next),每个结点的指针部分指向下一个输入的结点。具体建立过程如下:先输入n个整数,按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。输出删除后的单链表信息。
 

输入描述:

包括三行:
第一行输入数据个数n (3≤n≤100);

第二行依次输入n个整数,用空格分隔;

第三行输入欲删除数据m。

输出描述:

包括两行:

第一行输出完成删除后的单链表长度;

第二行依次输出完成删除后的单链表数据。

示例1

输入

复制
5
1 2 2 3 4
2

输出

复制
3
1 3 4
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 struct ListNode
 4 {
 5     int val;
 6     struct ListNode *next;
 7 }*newlist;
 8 int main()
 9 {
10     int n;
11     scanf("%d",&n);
12     int i,x;
13     struct ListNode *nl=(struct ListNode*)malloc(sizeof(struct ListNode));
14     nl->next=NULL;
15     struct ListNode *q=nl,*tmp,*p;
16     for(i=0;i<n;i++){
17         scanf("%d",&x);
18         tmp=(struct ListNode*)malloc(sizeof(struct ListNode));
19         tmp->next=NULL;
20         tmp->val=x;
21         q->next=tmp;
22         q=tmp;
23     }
24     int m;
25     scanf("%d",&m);
26     q=nl->next;
27     struct ListNode *newl=(struct ListNode*)malloc(sizeof(struct ListNode));
28     newl->next=NULL;
29     int cnt=0;
30     p=newl;
31     while(q){
32         if(q->val!=m){
33             tmp=(struct ListNode*)malloc(sizeof(struct ListNode));
34             tmp->next=NULL;
35             tmp->val=q->val;
36             p->next=tmp;
37             p=tmp;
38             cnt++;
39         }
40         q=q->next;
41     }
42     printf("%d\n",cnt);
43     q=newl->next;
44     while(q){
45         cnt--;
46         if(cnt==0) printf("%d\n",q->val);
47         else printf("%d ",q->val);
48         q=q->next;
49     }
50 }

 

posted @ 2020-04-10 14:52  午夜的行人  阅读(40)  评论(0编辑  收藏
Live2D