具体功能是删除链表的所有结点
程序如下
#include <stdio.h>
#include <stdlib.h>
#define SIZE 20
//定义链表
struct node
{int data;
struct node *next;
};
typedef struct node Lnode;
typedef struct node *linklist;
//创建新节点
Lnode *createnewnode(int value)
{
Lnode *newnode=NULL;
newnode=(Lnode*)malloc(1*sizeof(Lnode));
if(newnode==NULL)
return NULL;
newnode->next=NULL;
newnode->data=value;
return newnode;
}
//创建空链表
linklist createempty()
{
return createnewnode(-1);
}
//插入新节点Lnode *insertat(Lnode *p1,int value)
{
if(p1==NULL)
return NULL;
Lnode *newnode=NULL;
newnode=createnewnode(value);
if(newnode!=NULL)
{
newnode->next=p1->next;
p1->next=newnode;
}
return newnode;
}
//尾部插入
Lnode *insertattail(Lnode *head,int value[],int size)
{
int i=0;
Lnode *ret=NULL;
Lnode *tail=head;
while(tail->next!=NULL)
tail=tail->next;
for(i=0;i<size;i++)
{
ret=insertat(tail,value[i]);
if(ret!=NULL)
tail=tail->next;
}
return head;
}
//删除所有
void del_all(Lnode *head)
{
Lnode *p;
if(head==NULL)
return;
while(head->next!=NULL)
{
p=head->next;
free(head);
head=p;
}
}
//显示
void printlist(linklist head)
{
Lnode *p=NULL;
p=head;
if(head==NULL)
return;
while(p!=NULL)
{
printf("%d ",p->data);p=p->next;
}
printf("\n");
}
//主函数
int main()
{
int i,n,a[SIZE]={0};
Lnode *p;
Lnode *head=createempty();
if(head!=NULL&&head->next==NULL)
printf("新链表创建成功!\n");
else
printf("未能创建新链表!\n");
printf("请输入链表元素的个数:\n");
scanf("%d",&n);
printf("请输入链表元素:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("新建链表为:\n");
p=insertattail(head,a,n);
printlist(p);
printf("删除所有节点后:\n");
del_all(p);
printlist(p);
}
结果是这样的,结点是被删除了,但是却输出地址
程序如下
#include <stdio.h>
#include <stdlib.h>
#define SIZE 20
//定义链表
struct node
{int data;
struct node *next;
};
typedef struct node Lnode;
typedef struct node *linklist;
//创建新节点
Lnode *createnewnode(int value)
{
Lnode *newnode=NULL;
newnode=(Lnode*)malloc(1*sizeof(Lnode));
if(newnode==NULL)
return NULL;
newnode->next=NULL;
newnode->data=value;
return newnode;
}
//创建空链表
linklist createempty()
{
return createnewnode(-1);
}
//插入新节点Lnode *insertat(Lnode *p1,int value)
{
if(p1==NULL)
return NULL;
Lnode *newnode=NULL;
newnode=createnewnode(value);
if(newnode!=NULL)
{
newnode->next=p1->next;
p1->next=newnode;
}
return newnode;
}
//尾部插入
Lnode *insertattail(Lnode *head,int value[],int size)
{
int i=0;
Lnode *ret=NULL;
Lnode *tail=head;
while(tail->next!=NULL)
tail=tail->next;
for(i=0;i<size;i++)
{
ret=insertat(tail,value[i]);
if(ret!=NULL)
tail=tail->next;
}
return head;
}
//删除所有
void del_all(Lnode *head)
{
Lnode *p;
if(head==NULL)
return;
while(head->next!=NULL)
{
p=head->next;
free(head);
head=p;
}
}
//显示
void printlist(linklist head)
{
Lnode *p=NULL;
p=head;
if(head==NULL)
return;
while(p!=NULL)
{
printf("%d ",p->data);p=p->next;
}
printf("\n");
}
//主函数
int main()
{
int i,n,a[SIZE]={0};
Lnode *p;
Lnode *head=createempty();
if(head!=NULL&&head->next==NULL)
printf("新链表创建成功!\n");
else
printf("未能创建新链表!\n");
printf("请输入链表元素的个数:\n");
scanf("%d",&n);
printf("请输入链表元素:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("新建链表为:\n");
p=insertattail(head,a,n);
printlist(p);
printf("删除所有节点后:\n");
del_all(p);
printlist(p);
}
结果是这样的,结点是被删除了,但是却输出地址