首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

帮忙看下这链表,每次写都出错解决思路

2012-04-14 
帮忙看下这链表,每次写都出错学链表,写代码总是出错,帮忙分析下代码哪里错了。那个,malloc后的NULL判断我知

帮忙看下这链表,每次写都出错
学链表,写代码总是出错,帮忙分析下代码哪里错了。
那个,malloc后的NULL判断我知道,暂时没写,少些麻烦。
还有链表逆序看不懂。

C/C++ code
#include <stdio.h>#include <malloc.h>#define PF printftypedef struct node{    int Data;    node *next;}*Pnode;typedef struct Link{    int Length;    Pnode Head;}*PLink;PLink CreateLink(int Num){    PLink P=(PLink)malloc(sizeof(Link));    P->Head=NULL;    P->Length=0;    Pnode Nnode=(Pnode)malloc(sizeof(node));    Nnode->next=NULL;    Pnode H=P->Head;    for (int i=0;i<Num;i++)    {        Nnode->Data=i;        if (0==i)        {            H=Nnode;        }        else        {//应该是这里出错了吧,第一段注释,我的意思是头结点向后移动,然后将新节点赋给头结点,//新节点作为尾节点,它的next指向NULL;后面未注释的,我觉得两个一个意思。//H=Nnode,是H指向Nnode,也就可以理解为H移动到Nnode的位置么。            /*H=H->next;            H=Nnode;            Nnode->next=NULL;*/            H->next=Nnode;            H=Nnode;            Nnode->next=NULL;        }    }    return P;}void main(){    PLink P=CreateLink(5);    PF("%d ",P->Head->next->Data);}


[解决办法]
Pnode Nnode=(Pnode)malloc(sizeof(node));
要分配num个Nnode的内存,你只分配了一个,for循环当中,每创建一个Nnode节点都要分配内存
[解决办法]
C/C++ code
PLink CreateLink(int Num){    PLink P=(PLink)malloc(sizeof(Link));    P->Head=NULL;    P->Length=0;    Pnode Nnode=NULL;    Pnode H;    for (int i=0;i<Num;i++)    {        Nnode=(Pnode)malloc(sizeof(node));        Nnode->Data=i;        if (0==i)        {            H=Nnode;            P->Head = H;        }        else        {            /*H=H->next;            H=Nnode;            Nnode->next=NULL;*/            H->next=Nnode;            H=Nnode;            Nnode->next=NULL;        }    }    return P;}
[解决办法]
C/C++ code
#include <stdio.h>#include <stdlib.h>  // #include <malloc.h>// #define PF printf  // 没必要这么节省哈^ ^typedef struct node{    int Data;    node *next;} Node, *Pnode, *PLink;  ///*typedef struct Link{    int Length;    Pnode Head;} *PLink;*/  // 这里没必要PLink CreateLink(int Num){    Pnode Nnode;  // 新加的    PLink Head = (PLink)malloc(sizeof(Node));  // PLink p = (PLink)malloc(sizeof(Link));    Head->next = NULL;  // p->Head = NULL;    // p->Length = 0;    // Nnode = (Pnode)malloc(sizeof(node));    // Nnode->next = NULL;    Pnode H = Head;  // Pnode H = p->Head;    for (int i = 0; i < Num; ++i)    {        Nnode = (Pnode)malloc(sizeof(node));  // 新加的        Nnode->next = NULL;  // 新加的        Nnode->Data = i;        /*if (0 == i)        {            H = Nnode;        }        else        {*///应该是这里出错了吧,第一段注释,我的意思是头结点向后移动,然后将新节点赋给头结点,//新节点作为尾节点,它的next指向NULL;后面未注释的,我觉得两个一个意思。//H=Nnode,是H指向Nnode,也就可以理解为H移动到Nnode的位置么。            /*H=H->next;            H = Nnode;            Nnode->next = NULL;*/            H->next = Nnode;            H = Nnode;            //Nnode->next = NULL;        //}    }    return Head;  //return P;}int main() // 戒除void main()陋习{    PLink p = CreateLink(5);    // PF("%d ",p->Head->next->Data);// 以下内容为新加的/*********************************************/    Pnode q = p->next;    while (q != NULL)    {        printf("%d ", q->Data);        q = q->next;    }    printf("\n");    while (p != NULL)    {        q = p;        p = p->next;        free(q);    }/*********************************************/    return 0; // 配套int main()} 

热点排行