-
#include "stdio.h"
-
#include<malloc.h>
-
#define ok 0
-
#define error 1
-
struct node
-
{
-
int data;
-
struct node *next;
-
};
-
typedef struct node * LinkList;
-
int CreatLinkList(LinkList h,int n)
-
{
-
LinkList tmp,p;
-
int i;
-
// h=(LinkList)malloc(sizeof(struct node));
-
p= h;
-
for(i=0;i<n;i++)
-
{
-
tmp=(LinkList)malloc(sizeof(struct node));
-
tmp->data=i;
-
tmp->next=NULL;
-
-
p->next=tmp;
-
p=p->next;
-
}
-
return ok;
-
}
-
void PritLinkList(LinkList h)
-
{
-
LinkList p;
-
p=h->next;
-
while(p)
-
{
-
printf("%d\n",p->data);
-
p=p->next;
-
}
-
}
-
void main()
-
{
-
LinkList head =(LinkList)malloc(sizeof(struct node));
-
CreatLinkList( head,5);
-
//InsertLinkList(head,3,9);
-
//DeleteLinkList(head,6);
-
PritLinkList(head);
-
-
}
CreatLinkList( head,5);这样传递参数是可以的,注意是16行和23行,临时指针p指向,h指向的地址,h指向的是主函数中head指向的地址,因此这三个地址开始是相同的。在23行,
p->next=tmp;实际上是对head指向地址内部next参数的操作。不会出错。和下面对比
-
#include "stdio.h"
-
#include<malloc.h>
-
#define ok 0
-
#define error 1
-
struct node
-
{
-
int data;
-
struct node *next;
-
};
-
typedef struct node * LinkList;
-
int CreatLinkList(LinkList h,int n)
-
{
-
LinkList tmp,p;
-
int i;
-
h=(LinkList)malloc(sizeof(struct node));
-
p= h;
-
for(i=0;i<n;i++)
-
{
-
tmp=(LinkList)malloc(sizeof(struct node));
-
tmp->data=i;
-
tmp->next=NULL;
-
-
p->next=tmp;
-
p=p->next;
-
}
-
return ok;
-
}
-
void PritLinkList(LinkList h)
-
{
-
LinkList p;
-
p=h->next;
-
while(p)
-
{
-
printf("%d\n",p->data);
-
p=p->next;
-
}
-
}
-
void main()
-
{
-
LinkList head=(LinkList)malloc(sizeof(struct node));
-
CreatLinkList( head,5);
-
//InsertLinkList(head,3,9);
-
//DeleteLinkList(head,6);
-
PritLinkList(head);
-
-
}
注意和上面代码对比,多了15行,运行会出错,因为15行 h=(LinkList)malloc(sizeof(struct node));h不是指向原来head的地址而是改为一个新的空间了,所以下面的操作都不是对head里面的地址内容进行操作了。在修改下:
-
#include "stdio.h"
-
#include<malloc.h>
-
#define ok 0
-
#define error 1
-
struct node
-
{
-
int data;
-
struct node *next;
-
};
-
typedef struct node * LinkList;
-
int CreatLinkList(LinkList * h,int n)
-
{
-
LinkList tmp,p;
-
int i;
-
*h=(LinkList)malloc(sizeof(struct node));
-
p= *h;
-
for(i=0;i<n;i++)
-
{
-
tmp=(LinkList)malloc(sizeof(struct node));
-
tmp->data=i;
-
tmp->next=NULL;
-
-
p->next=tmp;
-
p=p->next;
-
}
-
return ok;
-
}
-
-
void main()
-
{
-
LinkList head=(LinkList)malloc(sizeof(struct node));
-
CreatLinkList( &head,5);
-
//InsertLinkList(head,3,9);
-
//DeleteLinkList(head,6);
-
PritLinkList(head);
-
-
}
11行,15行,16行,修改了,注意和上面的区别。主函数没变,这里能运行了,但是原来head指向的地址修改了,在主函数中指向的那片区域没有释放,也没再用,而是改变了head的指向。
主函数CreatLinkList( &head,5);,传入head的地址。
主函数可以修改成下面形式,就定义个head指针,在creatlinklist中初始化,和赋值。
-
void main()
-
{
-
LinkList head ;
-
CreatLinkList( &head,5);
-
//InsertLinkList(head,3,9);
-
//DeleteLinkList(head,6);
-
PritLinkList(head);
-
-
}
阅读(846) | 评论(0) | 转发(0) |