题解 | #KiKi学结构体和指针#

KiKi学结构体和指针

https://www.nowcoder.com/practice/0ab593ca56b1476eb05b1ff848fd7fcc

//难绷的数据结构,第一次犯了好多错。写到一半才发现可以有很多更好的选择,自己偏偏选了最难最烦的那一种。
//这就是改屎山的快感吗
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
//基本元素声明
typedef struct Node {
    int  data;
    struct Node* next;
} Node;
typedef struct Node* List;
//typedef enum bool{ failure = 0,true = 1 } Bool;

//接口声明
List Add(List list, int x);//增加一个节点,并返回该节点地址。
List Delete(List list, int x ,int* s);//删除指定节点,并返回首节点指针。
List findpre(List list,int x);//找到x的先驱元,若x为首元素则返回NULL,未找到也返回空
void pr_list(List list);//遍历链表
void free_List(List list);

//具体实现
int main()
{
    int n = 0;
    scanf("%d", &n);
    List list = NULL;
    int x = 0;
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &x);
        list = Add(list, x);
    }
    //printf("%d",list ->next-> data);
    int m = 0;
    scanf("%d", &m);
    int y=0;
    list = Delete(list, m ,&y);
    //printf("%d",list->next->data);
    printf("%d\n",n-y);
    pr_list(list);
   // printf("\n%d",z);
    free_List(list);

    return 0;
}


//接口定义
List Add(List list, int x)
{
    if (list == NULL)
    {
        list = malloc(sizeof(Node));//创建第一个节点
        if (list == NULL)
        {
            printf("Out of space!");
            return list;
        }
        else
        {
            list->data = x;
            list->next = NULL;
        }
    }
    else
    {
        list->next = Add(list->next, x);
    }

    return list;

}

List findpre(List list,int x)
{
    List listtmp=NULL;
    /*if(list -> data == x)
    {
        //return NULL;
        ;
    }*/
    //else 
    //{
        while(list -> next != NULL)
        {
            if(list -> next -> data == x)
            {
                listtmp = list ;
                break ;
            }
            else 
            {
                list = list -> next;
            }
        //}
        }
        return listtmp;
    
}

List Delete(List list, int x,int* s)
{
    int *y=s;
    List listbox = list;
    List listtmp = NULL;
    if((listtmp=findpre(list , x))!=NULL)
    {
        List listz = NULL;
        while(listtmp != NULL)
        {
            listz = listtmp -> next;
            listtmp -> next = listz -> next;
            free(listz);
            (*y)++;
            listtmp = findpre(listtmp , x);
        }
    }

    //else 
   // {
        list = listbox;
        if (list->data == x)
        {
            (*y)++;
            listtmp = list;
            list = list->next;
            free(listtmp);
        }
   // }
    

    return list;
}

void pr_list(List list)
{
   // int n=0;
    while (list != NULL)
    {
        printf("%d ", list->data);
       // n++;
        list = list->next;
    }
    //return n;

}
void free_List(List list)
{
    List listtmp = NULL;

    while (list != NULL)
    {
        listtmp = list;
        list = list->next;
        free(listtmp);
    }
}

全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
443000次浏览 4514人参与
# 春招别灰心,我们一人来一句鼓励 #
42077次浏览 535人参与
# 北方华创开奖 #
107460次浏览 600人参与
# 地方国企笔面经互助 #
7969次浏览 18人参与
# 同bg的你秋招战况如何? #
77008次浏览 566人参与
# 实习必须要去大厂吗? #
55793次浏览 961人参与
# 阿里云管培生offer #
120375次浏览 2220人参与
# 虾皮求职进展汇总 #
116056次浏览 886人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11650次浏览 289人参与
# 实习,投递多份简历没人回复怎么办 #
2454867次浏览 34858人参与
# 提前批简历挂麻了怎么办 #
149922次浏览 1978人参与
# 在找工作求抱抱 #
906075次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4762次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1196011次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157641次浏览 2267人参与
# 双非本科求职如何逆袭 #
662333次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12793次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35884次浏览 384人参与
# 简历中的项目经历要怎么写? #
86934次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20145次浏览 240人参与
# 我的上岸简历长这样 #
452046次浏览 8089人参与
牛客网
牛客企业服务