标签:
废话不多说,直接看代码
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct node{
ElemType data;
struct node *next;
}node,*link;
void display(link list);
//使用头插法
link createH(link l){
ElemType i;
l->next=NULL;
link p=NULL;
while(1){
/*p=(link)malloc(sizeof(node));
if (NULL == p)
{
printf("memory out of use/n");
return l;
} */
for(i=1;i<10;i++){
p=(link)malloc(sizeof(node));
p->data=i;
p->next=l->next;
l->next=p;
}
break;
/*
if(scanf("%d",&p->data)!=EOF){
p->next=l->next;
l->next=p;
}else{
break;
}*/
}
return l;
}
link createF(link list){
link p,k;
list->next=NULL;
int i;
for(i=1;i<10;i++){
k=list;
p=(link)malloc(sizeof(node));
p->data=i;
while(k->next!=NULL){
k=k->next;
}
p->next=NULL;
k->next=p;
}
return list;
}
//方法一
link reverseA(link prev,link cur){
link list=NULL;
if(cur==NULL){
return prev;
}
list=reverseA(cur,cur->next);
cur->next=prev;
return list;
}
//方法二
link reverseB(link p){
if( p->next==NULL){
return p;
}
link ph=reverseB(p->next);
p->next->next=p;
p->next=NULL;
return ph;
}
//方法三
link reverseC(link l){
link p=NULL,q=NULL;
p=l->next;
l->next=NULL;//头结点分离
while(p!=NULL){
q=p;
p=p->next;
q->next=l->next;
l->next=q;
}
return l;
}
//方法四
link reverseD(link l){
link p=NULL,q=NULL;
if(l==NULL){
return l;
}
p=l;
q=p->next;
if(q==NULL){
return p;
}else{
l=reverseR(q);
}
q->next=p;
p->next=NULL;
return l;
}
void display(link list){
link p=list;
while(p!=NULL){
printf("%4d",p->data);
p=p->next;
}
printf("\n");
}
void main(){
link list,p,r;
list=(link)malloc(sizeof(node));
p=(link)malloc(sizeof(node));
r=(link)malloc(sizeof(node));
p=createF(list);
display(p);
r=reverseA(NULL,p);
display(r);
r=reverseB(p);
display(r);
}
当然,还有其他方法,我会陆续添加
标签:
原文地址:http://www.cnblogs.com/chenpingzhao/p/4564863.html