c语言初识链表 c语言程序设计

已知一个正整数序列,个数未知,但至少有一个元素,你的任务是建立一个单链表,并使用该链表存储这个正整数序列,然后统计这个序列中元素的最大值与最小值,计算序列全部元素之和。正整数的输入用-1作为结束标志,注意-1不算这个正整数序列中的元素(不要统计-1)。
Input
一个正整数序列,正整数序列元素的个数未知,但以输入“-1”结束,输入“-1”前至少输入一个正整数。序列中的元素范围在1—999999999之间。
Output
三个正整数,即最大值、最小值、所有元素之和。
数据最多的测试用例节点数在1000这个数量级,所有整数可以用int型存储。
请注意输入输出格式。
Sample Input Copy
1 4 99 21 50 61 32 4 -1
Sample Output Copy
The maximum,minmum and the total are:99 1 272
以下是自己写的程序,在devc上运行也没问题,但放上oj就显示编译错误了
想请问是什么问题,麻烦各位康康!谢谢~~

#include<stdio.h>
#include<stdlib.h> 
#include<malloc.h>
struct node{
    int value;
    node* next;
};
int main(){
    node*head=(node*)malloc(sizeof(node));
    node*flag=head;
    scanf("%d",&flag->value);
    int i=0,max,min;
    if(i==0){
            min=flag->value;
            i++;
        }
    while(flag->value!=-1){
        flag->next=(node*)malloc(sizeof(node));
        flag=flag->next;
        scanf("%d",&flag->value);
        if(flag->value>max&&flag->value!=-1)
        {
            max=flag->value;
        }
        else if(flag->value<min&&flag->value!=-1)
        {
            min=flag->value;
         } 
    }
    flag->next=NULL;
    flag=head;
    int sum=0;
    while(flag!=NULL)
    {
        sum+=flag->value;
        flag=flag->next;
    }
    printf("The maximum,minmum and the total are:%d %d %d",max,min,sum+1);
    getchar();
    return 0;
}

修改如下,供参考:

#include<stdio.h>
#include<stdlib.h> 
#include<malloc.h>
#include<windows.h>
struct node{
    int   value;
    node* next;
};
int main(){
    struct node*head = NULL,*flag = NULL,*end = NULL;
    int i,max=0,min=0,sum=0;
    while(1){
        scanf("%d",&i);
        if (i == -1)  break;
        flag =(struct node*)malloc(sizeof(struct node));
        flag->next = NULL;
        flag->value = i;
        if (head == NULL){
            head = flag;
            sum = max = min = flag->value;
        }
        else{
            end->next = flag;
            if(flag->value>max)
               max=flag->value;
            if(flag->value<min)
               min=flag->value;
            sum += flag->value;
        }
        end = flag;
    }
    printf("The maximum,minmum and the total are:%d %d %d",max,min,sum);
    system("pause");
    return 0;
}