数据结构 链表 插入出错

 #include <stdio.h>
#include <string>
#include <iostream>
using namespace std;

struct LNode{
    string name;
    string sex;
    int age;
    LNode *next;
};
LNode *students;

void InitList(LNode *list){
    list=(LNode *)malloc(sizeof(LNode));
    list->next=NULL;
}

int GetAge(LNode *list,int i){
    LNode *p;
    p=list;
    int j;
    int Age;
    Age=p->age;
    for(j=2;j<=i;j++){
        p=p->next;
        Age=p->age;
    }
    return Age;
}

int GetNextAge(LNode *list,int i){
    LNode *p;
    p=list;
    int j;
    int NextAge;
    NextAge=p->age;
    for(j=2;j<=i+1;j++){
        p=p->next;
        NextAge=p->age;
    }
    return NextAge;
}

void HeadInsert(LNode *list,string name1,string sex1,int age1){
    LNode *p;
    p=list;
    LNode *s;
    s=(LNode *)malloc(sizeof(LNode));
    s->name=name1;
    s->sex=sex1;
    s->age=age1;

    s->next=p;
    list=s;
}

void ListInsert(LNode *list,string name1,string sex1,int age1,int j){
    LNode *p;
    p=list;                 //指向同一地址 *p=*list 指针复制 地址不一定一样 
    int i;
    for(i=1;i<j;i++){
        p=p->next;
    }                    //找到第j个节点 p为指向第j个节点的指针 
    LNode *s;
    s=(LNode *)malloc(sizeof(LNode));
    s->name=name1;
    s->sex=sex1;
    s->age=age1;

    if(p->next){
    s->next=p->next;    
    }
    p->next=s;
}

void Insert(LNode *list,string name1,string sex1,int age1){
    int i,Age,NextAge;
    i=1;
    while(1){
        Age=GetAge(list,i);

        if(age1<Age){
            HeadInsert(list,name1,sex1,age1);
            break;
        }

        if(GetNextAge(list,i)){
        NextAge=GetNextAge(list,i);
        }
        else{
            ListInsert(list,name1,sex1,age1,i+1);
            break;             //nextage不存在 插在最后 跳出循环 
        }

        if((age1<NextAge) && (Age<age1)){
            Insert(list,name1,sex1,age1);
            break;
        }
        i=i+1;
    }
}

void Display(LNode *list){
    LNode *p;
    p=list;
    while(p){
        cout<< (p->name) << "\n" << (p->sex) << "\n" << (p->age) << "\n\n";
        p=p->next;
    }
}

int main(){
    InitList(students);
    string name;
    string sex;
    name="abc";
    sex="male";
    int age=1;


    ListInsert(students,name,sex,age,1);
    Display(students);
}

这是我们的数据结构的实验作业
编译没有出错但是在测试ListInsert操作的时候显示已停止运行 也不知道错在哪
希望大神们能帮忙找找bug。。。谢谢了!

void ListInsert(LNode *list,string name1,string sex1,int age1,int j){
LNode *p;
p=list; //指向同一地址 *p=*list 指针复制 地址不一定一样
int i;
for(i=1;i p=p->next;
} //找到第j个节点 p为指向第j个节点的指针
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
s->name=name1;
s->sex=sex1;
s->age=age1;

if(p->next){
s->next=p->next;    
}
p->next=s;

}
初看了一下,没有时间运行了,在ListInsert()等函数后需要添加s->next = NULL,否则display()时会越界,目测改正后能够正确插入一个元素吧;;
另程序存在问题不少,需要好好锤炼一下

程序

 #include <iostream>
#include <string>

using namespace std;

typedef struct LNode{   
    char *name;
    char *sex;
    int age;
    struct LNode *next;
}LNode,*LinkList;

void InitList(LinkList *list){
    (*list)=(LinkList)malloc(sizeof(LNode));
    (*list)->next=NULL;
}

void ListInsert(LinkList list,char *name1,char *sex1,int age1,int j){
    if(!list)
        return;
    LinkList p,s;
    p=list;
    s=(LinkList)malloc(sizeof(LNode));
    s->next=NULL;
    s->age=age1;
    s->name=name1;
    s->sex=sex1;

    for(int i=1;i<j;++i)
        p=p->next;
    p->next=s;
}

void Display(LinkList list){
    LinkList p;
    p=list->next;
    while(p){
        cout<< (p->age) << endl
            << (p->sex) << endl
            << (p->name) << endl;
        p=p->next;
    }
}

int main(){
    LinkList students;
    InitList(&students);
    char *name="abc";
    char *sex="male";
    int age=12;

    ListInsert(students,name,sex,age,1);
    Display(students);
}

结果

 12
male
abc
请按任意键继续. . .