注册 登录
编程论坛 数据结构与算法

在链表插入中,当插入位置i=1时为何程序运行的结果不像是插入的数据,求指教,谢谢

初学者_12 发布于 2012-08-04 10:29, 452 次点击
代码如下:
#include "stdio.h"
#include "stdlib.h"
struct node
{
    int NO;
    int score;
    struct node *next;
};
struct node *creat()
{
    struct node *p,*listp,*listhead;
    int i;
    for(i=1;i<4;i++)
    {
        p=(struct node *)malloc(sizeof(struct node));
        if(i==1)
        listhead=p;
        else
        listp->next=p;
        listp=p;
        listp->next=NULL;
        printf("请输入第%d个同学的学号和成绩:",i);
        scanf("%d %d",&p->NO,&p->score);
    }
    return listhead;
}
void print(struct node *listhead)
{
    struct node *p;
    if(listhead==NULL)
    {
        printf("链表为空");
        return ;
    }
    p=listhead;
    while(p!=NULL)
    {
    printf("%d %d\n",p->NO,p->score);
    p=p->next;
    }
}
struct node *insert(struct node *listhead)
{
    struct node *p,*listp;
    int i,x,y;
    printf("请输入要插入的位置和数据:");
    scanf("%d %d %d",&i,&x,&y);
    if(listhead==NULL)
    {
        printf("链表还没有建立!\n");
        return listhead;
    }
    int k=1;
    listp=listhead;
    while(listp!=NULL&&k<i-1)
    {
        listp=listp->next;
        k++;
    }
    if(k<i-1||i<1)
    printf("插入位置必须大于零小于%d\n",k+1);
    else if(i==1)
    {
    if((p=(struct node *)malloc(sizeof(struct node)))==NULL)
    {
        printf("内存分配错误!\n");
        exit(0);
    }
    p->NO=x;
    p->score=y;
    p->next=listhead;
    listhead=p;
    }
    else
    {
        if((p=(struct node *)malloc(sizeof(struct node)))==NULL)
        {
            printf("内存分配错误!\n");
            exit(0);
        }
        p->NO=x;
        p->score=y;
        p->next=listp->next;
        listp->next=p;
    }
    return listhead;
}
int main()
{
    struct node *listhead;
    listhead=creat();
    insert(listhead);
    print(listhead);
}
2 回复
#2
hao021719902012-08-14 11:17
哦!我看了半天,没有发现错误啊!一切正常啊!无言!
#3
chuanglan2012-08-15 11:18
我发现的问题比较多。。。都是些小问题,加我扣扣聊,994564686,刺客
1