废话不多说,直接看代码
#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); }
当然,还有其他方法,我会陆续添加
时间: 2024-10-16 03:46:42