注意:创建节点,一定要销毁节点。
#include
#include
typedef struct node{
intdata;
structnode *next;
} node_t;
// 创建节点函数
void *create(int size);
// 初始化链表
int init(node_t *head);
// 头插入法
int insert_head(node_t *head,node_t *pn);
// 尾插入法
int insert_end(node_t *head,node_t *pn);
// 打印所有节点内容
void print(node_t *head);
// 销毁所有节点
void destroy(node_t *head);
// 应用函数
// 创建长度为 len 的链表并输入内容
int create_link(node_t *head,int len);
int main()
{
node_t*head = NULL;
intlen = 0;
if(init(head= create(sizeof(node_t))) != 0){
printf("初始化链表失败
");
exit(0);
}
printf("长度:");
scanf("%d",&len);
create_link(head,len);
print(head);
destroy(head);
free(head);
head= NULL;
return0;
}
// 创建节点函数
// 成功返回新节点首地址,失败返回 NULL
void *create(int size)
{
returncalloc(1,size);
}
// 初始化链表
// 0-成功 1-失败
int init(node_t *head)
{
if(NULL== head)
return1;
head->next= NULL;
return0;
}
// 头插入法
// 0-成功 1-失败
int insert_head(node_t *head,node_t *pn)
{
if(NULL== pn)
return1;
pn->next= head->next;
head->next= pn;
return0;
}
// 尾插入法
// 0-成功 1-失败
int insert_end(node_t *head,node_t *pn)
{
node_t*tail = NULL;
if(NULL== pn)
return1;
tail= head;
while(tail->next!= NULL)
tail= tail->next;
tail->next= pn;
pn->next= NULL;
return0;
}
// 打印所有节点内容
void print(node_t *head)
{
node_t*cur = NULL;
cur= head->next;
while(cur!= NULL){
printf("%d",cur->data);
cur= cur->next;
}
printf("
");
}
// 销毁所有节点
void destroy(node_t *head)
{
node_t*del =NULL,*n_node = NULL;
del = head->next;
while(del != NULL){
n_node= del->next;
free(del);
del = n_node;
}
init(head);
}
// 应用函数
// 创建长度为 len 的链表并输入内容
// 返回创建的节点数
int create_link(node_t *head,int len)
{
inti = 0;
node_t*n_node = NULL;
printf("输入 %d 个数:
",len);
for(i= 0;i < len;i++){
n_node= create(sizeof(node_t));//创建新节点
if(NULL== n_node)
returni;
scanf("%d",&n_node->data); // 输入数据
insert_end(head,n_node); // 插入链表
}
returni;
}