| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 293 人关注过本帖
标题:链表删除节点时,程序终止
只看楼主 加入收藏
hailong2012
Rank: 2
等 级:论坛游民
威 望:1
帖 子:7
专家分:19
注 册:2018-3-12
结帖率:100%
  已结贴   问题点数:20  回复次数:2   
链表删除节点时,程序终止
我有个链表删除节点的问题,删除节点时,程序运行终止我找不出问题在那里,找了好久找不出原因所在

源代码如下:
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define LEN sizeof(struct student)

struct student *creat(void);
void print(struct student *head);
struct student *del(struct student *head, long num);

struct student
{
    long num;
    float score;
    struct student *next;
};

int n;

int main()
{
    struct student *head, *stu;
    long del_num;
    printf("input records:\n");
    head = creat();
    print(head);
    printf("\ninput the deleted number:");
    scanf("%ld,&del_num");
    head = del(head,del_num);
    print(head);
    return(0);
}

struct student *creat(void)
{   

    struct student *head;
    struct student *p1,*p2;
    n = 0;
    p1 = p2 = (struct student *)malloc(LEN);

    scanf("%ld,%f",&p1->num,&p1->score);
    head = NULL;
    while(p1->num != 0)
    {   

        n = n + 1;
        if(n == 1) head = p1;
        else p2->next = p1;
        p2 = p1;
        p1 = (struct student *)malloc(LEN);
        scanf("%ld,%f",&p1->num,&p1->score);
    }

    p2->next = NULL;
    return(head);
}

void print(struct student *head)
{
    struct student *p;
    printf("\nNow, These %d records are:\n",n);
    p = head;
    if(head != NULL)
        do
    {
        printf("%ld \t%5.1f\n", p->num, p->score);
        p = p->next;
    } while(p != NULL);
}

struct student *del(struct student *head, long num)
{
    struct student *p1,*p2;
    if(head == NULL)
        {printf("\nlist null!\n");
         return(head);
        }
    p1 = head;
    while(num!=p1->num && p1->next!=NULL)
        {p2=p1;p1=p1->next;}
    if(num == p1->num)
        {if(p1 == head) head=p1->next;
         else p2->next = p1->next;
         printf("delete:%ld\n",num);
         n=n-1;
        }
    else printf("%ld not been found!\n", num);
    return(head);
}

附件: 您没有浏览附件的权限,请 登录注册
2018-03-12 10:30
SMRen
Rank: 2
等 级:论坛游民
帖 子:9
专家分:42
注 册:2018-3-9
  得分:20 
主函数里面的问题,如下标记:
int main()
{
    struct student *head, *stu;
    long del_num;
    printf("input records:\n");
    head = creat();
    print(head);
    printf("\ninput the deleted number:");
    scanf("%ld",&del_num);//*********************************************,&del_num被放进了引号
    head = del(head,del_num);
    print(head);
    return(0);
}
2018-03-12 22:53
hailong2012
Rank: 2
等 级:论坛游民
威 望:1
帖 子:7
专家分:19
注 册:2018-3-12
  得分:0 
回复 2楼 SMRen
谢谢你,你要不指出问题所在,我还真找不出来问题出在那里。
2018-03-13 11:58







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021738 second(s), 9 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved