帮忙看下这链表,每次写都出错
学链表,写代码总是出错,帮忙分析下代码哪里错了。
那个,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()}