基于c语言实现链表的基本操作 二(节点释放,节点复制,线性表的链式存储的逆序)
void *free_LNode(LNode *head){//节点的释放
LNode *p;
for(p=head->next;p;p=head->next){
head->next=p->next;
free(p);
}
free(head);
printf("节点释放成功");
}
LNode *copy_LNode(LNode *head){//复制线性链表的节点
LNode *newHead,*tail,*p,*newp;
newHead=tail=NULL;//创建无头结点的链表L,适用于复制带头结点和不带头结点的链表
for(p=head;p;p=p->next){
newp=(LNode *)malloc(sizeof(LNode));//创建新节点 ,用于存放从链表head中取出的节点
newp->next=NULL;
if(newHead==NULL){
newHead=newp;//由于单链表的是由头节点唯一确定的,故将取出的第一个节点作为头结点
}else{
tail->next=newp;
}
tail=newp;
newp->data=p->data;
}
printf("复制成功
");
return newHead;
}
LNode *reserve_LNode(LNode *head){//链表的逆序
LNode *newHead,*p;
newHead=(LNode*)malloc(sizeof(LNode));//创建新的链表的头结点
newHead->next=NULL;
for(p=head->next;p;p=head->next){
head->next=p->next;
p->next=newHead->next;
newHead->next=p;
}
printf("链表逆序之后是:
");
return newHead;
}
void print(LNode *head){
LNode *p;
p=head->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
printf("
");
}