注册 登录
编程论坛 C++教室

链表问题

宇智波曌 发布于 2011-09-14 13:05, 417 次点击
#include "stdio.h"
#include "stdlib.h"

typedef struct Lnode
{
    int    data;
    struct    Lnode *next;
}Londe,*LinkList;

void main()
{
    int    i = 0;
    LinkList L,p,q;
    L = (LinkList)malloc(sizeof(Lnode));

    if(L == NULL)
    {
        printf("申请内存空间失败!\n");
        exit(0);
    }

    L->next = NULL;
    q = L;

    while(i < 5)
    {
        p = (LinkList)malloc(sizeof(Lnode));

        if(p == NULL)
        {
            printf("申请内存空间失败\n");
            exit(0);
        }

        p->next = NULL;

        printf("请输入数据:\n");
        scanf("%d",&p->next);
        p->next = q->next;
        q->next = p;
        q = p;
        i++;
    }

    p = L->next;

    while(p)
    {   
        printf("%d",p->data);   
    }
}
我想输入五个数,如:1、2、3、4、5  ,然后用链表的形式输出。但是结果出现了乱码。哪位高手帮忙看看出了什么问题?
8 回复
#2
statics2011-09-14 15:42
p->next = NULL;
q->next = p;
q = p;
#3
宇智波曌2011-09-14 16:28
回复 2楼 statics
你这样改不行啊!具体点啊,拜托
#4
statics2011-09-14 16:33
把这块替换掉
        p->next = q->next;//q->next还没有值就被指针指,显然不对
        q->next = p;
        q = p;
#5
宇智波曌2011-09-14 17:35
回复 4楼 statics
改了也不行啊!,你运行了程序没有啊?
#6
xg56992011-09-15 00:26
为什么不用new要用淘汰的malloc函数呢???
#7
czsbc2011-09-15 00:40
程序代码:
#include "stdio.h"
#include "stdlib.h"

typedef struct Lnode
{
    int    data;
    struct    Lnode *next;
}Londe,*LinkList;                    //这里应该是Lnode吧

void main()
{
    int    i = 0;
    LinkList L,p,q;
    L = (LinkList)malloc(sizeof(Lnode));

    if(L == NULL)
    {
        printf("申请内存空间失败!\n");
        exit(0);
    }

    L->next = NULL;
    q = L;

    while(i < 5)
    {
        p = (LinkList)malloc(sizeof(Lnode));

        if(p == NULL)
        {
            printf("申请内存空间失败\n");
            exit(0);
        }

        p->next = NULL;

        printf("请输入数据:\n");
        scanf("%d",&p->next);                    //scanf("%d",&p->data);    数据放在数据成员里
        p->next = q->next;
        q->next = p;
        q = p;
        i++;
    }

    p = L->next;

    while(p)
    {   
        printf("%d",p->data);                //输出的时候,指针要后移,不然一直循环 p=p->next; 另外可以用空格隔开
    }
}


[ 本帖最后由 czsbc 于 2011-9-15 00:42 编辑 ]
#8
lqsh2011-09-16 13:11
程序代码:
#include "stdio.h";

 #include "stdlib.h";

typedef struct Lnode
{
     int    data;
     struct    Lnode *next;

 }Londe,*LinkList;

void main()

 {
     int    i = 0;
     LinkList L,p,q;//声明两个指针变量
     L = (LinkList)malloc(sizeof(Lnode));

    if(L == NULL)
     {
         printf("申请内存空间失败!\n");
         exit(0);
     }

    L->next = NULL;
     q = L;

    while(i < 5)
     {
         p = (LinkList)malloc(sizeof(Lnode));

        if(p == NULL)
         {
             printf("申请内存空间失败\n");
             exit(0);
         }

        p->next = NULL;

        printf("请输入数据:\n");
       // scanf("%d",&p->next);//这里出错
        scanf("%d",&p->data);
         p->next = q->next;
         q->next = p;
         q = p;
         i++;
     }

    p = L->next;

    while(p)
     {  
        printf("%d",p->data);  
        p=p->next;//指针后移
    }

}
#9
宇智波曌2011-09-16 14:24
回复 7楼 czsbc
我已经明白了,不过还是谢谢你
1