000882临风


私信TA

用户名:uq_35410107535

访问量:847

签 名:

携手归来看花时,不负如来不负卿。

等  级
排  名 6172
经  验 1388
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 伽理敦工业大学
专  业

  自我简介:

解题思路:一步一步来,先创建,然后删除,然后输出即可,别急

注意事项:注意代码中的指针的运用

参考代码:

#include <stdio.h>

#include <stdlib.h>

typedef struct student

{

    int score;

    struct student*next;

}Node,*node;

node create(int n);//创建链表

node delete_num(node head,int m);//删除链表中的元素

void output( node l );//输出链表



void main()

{

    int n,m;

    node head;//定义头指针

    scanf("%d",&n);//输入链表元素个数

    head=create(n);

    scanf ("%d",&m);//输入需要删除的元素

    delete_num( head, m);

    output(head);

}

node create(int n)

{

    node h;//定义头结点

    h=(node)malloc(sizeof(Node));//创建头结点

    h->next=NULL;//让头指针的指针域赋空

    node q=h;//定义一个指针q,指向头结点

    node p;//定义一个变化的指针p

    int i;

    for (i=0;i<n;i++)

    {

        p=(node)malloc(sizeof(Node));//为p开辟空间

        scanf("%d",&(*p).score);//输入学生的得分

        q->next=p;//让q指针指向p

        q=p;//把p赋值给q,此时q就是p

        q->next=NULL;//让q指针指向空,后插法


    }

    return(h);//返回头结点


}

node delete_num(node head,int m)

{

    node p,q;


    p=head->next;//定义指针p指向头结点

    while (p->next)

    {

        if (p->score!=m)

        {

             while(p->score!=m&&p->next)//当p不等于m,且有下一个值

                 {

                        q=p;

                        p=p->next;//让p指针指向后一个值,实现p的变化

                  }

        }

         if (p->score==m)

         {

             q->next=p->next;//让q的next指向p的后一个,从而实现删除

             free(p);//释放p,p值不存在了


         }

         p=q->next;//赋值新的p是q的next


    }

    return head;

}

void output(node l)

{

    l=l->next;//指针l指向next

    node q;////用于释放结点

    while(l!=NULL)

    {

        printf("%d ",l->score);

        q=l;

        l=l->next;//跳跃到下一个

        free(q);//释放,q不存在了

    }

}


 

0.0分

7 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

存在一个问题:如果被删除元素是第一个或者只有最后一个元素需要被删除,会失效
2024-03-06 16:33:54
good
2024-03-05 20:33:11
  • «
  • 1
  • »