李我远点 2017-02-28 03:10 采纳率: 71.4%
浏览 910
已采纳

建立一个学生链表,删除指定年龄的学生的节点,下面程序为什么不对?

#include
#include
#include
#include

typedef struct student
{
int num;
char name[20];
char sex;
int age;
struct student *next;
}node;

node* creat(void)
{
node * L,*p;
L = (node*)malloc(sizeof(node));
p = L;
int n;
printf("人数:");
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
node newp = (node)malloc(sizeof(node));
scanf("%d,%s,%c,%d",&newp->num,newp->name,&newp->sex,&newp->age);
newp->next = NULL;
p->next = newp;
p = newp;
}

return L;

}

void del(node *L,int n)
{
node *p = L;
while(p->next != NULL)
{
if(p->next->age == n)
{
p->next = p->next->next;
}
else p = p->next;
}
}

void print(node *L)
{
node *p = L->next;
while(p)
{
printf("%d %s %c %d\n",p->num,p->name,p->sex,p->age);
p = p->next;
}
}
void main()
{
node *L1 = creat();

int n;
printf("要删除的年龄:");
scanf("%d",&n);
del(L1,n);
print(L1);

system("pause");

}

  • 写回答

4条回答 默认 最新

  • 李我远点 2017-02-28 07:07
    关注

    #include
    #include
    #include
    #include

    typedef struct student
    {
    int num;
    char name[20];
    char sex;
    int age;
    struct student *next;
    }node;

    node* creat(void)
    {
    node * L,*p;
    L = (node*)malloc(sizeof(node));
    L->next = NULL;
    p = L;
    int n;
    printf("人数:");
    scanf("%d",&n);
    for(int i = 0;i < n;i++)
    {
    node newp = (node)malloc(sizeof(node));

        scanf("%d %s %c %d",&newp->num,newp->name,&newp->sex,&newp->age);
        newp ->next = NULL;
    
        p->next = newp;
        p = newp;
    
        //newp->next = L->next;
        //L->next  = newp;
    }
    
    return L;
    

    }

    void del(node *L,int n)
    {
    node *p = L;
    while(p->next != NULL)
    {
    if(p->next->age == n)
    {
    p->next = p->next->next;
    }
    else p = p->next;
    }
    }

    void print(node *L)
    {
    node *p = L->next;
    while(p)
    {
    printf("%d %s %c %d\n",p->num,p->name,p->sex,p->age);
    p = p->next;
    }
    }
    void main()
    {
    node *L1 = creat();

    int n;
    printf("要删除的年龄:");
    scanf("%d",&n);
    del(L1,n);
    print(L1);
    
    system("pause");
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码