因为你第一次循环时,没给L->DATA付值.
直接给P->DATA了.所以L->DATA的值为负

解决方案 »

  1.   

    L->next = NULL;
    printf("please input number 5 INT data:\n");
    p=L;
    for (n = 5;n > 0;--n)
    {
    scanf("%d",&p->data);
    p = (MyLNode*)malloc(sizeof(MyLNode));
    p->next =NULL;
    L->next = p;
    }
      

  2.   

    L->next = NULL;printf("please input number 5 INT data:\n");
    p=L;
    struct MyLNode* q;
    q=L;
    for (n = 5;n > 0;--n)
    {
    scanf("%d",&p->data);
             q=p;
    p = (MyLNode*)malloc(sizeof(MyLNode));
    p->next =NULL;
    q->next = p;
             
    }
      

  3.   

    struct MyLNode* Head = NULL;
    struct MyLNode* p = NULL;for (n = 5;n > 0;--n)
    {
    p = (MyLNode*)malloc(sizeof(MyLNode));
    p->data = data;
    p->next = NULL;
    if( Head )
    {
    p->next = Head;
    Head = p;
    }
    else
    {
    Head = p;
    }
    }
    for (p = Head;p->next != NULL;p = p->next)
    {
    //printf("链表第%d个数据:\n",n);

    printf("%d\n",p->data);
    }
      

  4.   

    算算你有几个(MyLNode*)malloc(sizeof(MyLNode)):1+5
    第一个(MyLNode*)malloc(sizeof(MyLNode))你没有读,当然会出现负数了。其实你这个应该是个堆栈吧!改起来应该挺方便的:for(n = 5; n > 0; --n){
    p = (MyLNode*)malloc(sizeof(MyLNode));
    scanf("d",&p->data);p->next = L->next;
    L = p;//第一个数据就是你最新读的数据,最后一个数据不会被读到,所以即使是没有初始化也不要紧。
    }