单向链表的逆序操作
#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; } //方法五 link reverseE(link p){ link pre=NULL,pnext=NULL,cur=p; while(cur!=NULL){ pnext=cur->next; cur->next=pre; pre=cur; cur=pnext; } return pre; } //按照位置删除节点 link delete(link list,int i){ link p=list,k=NULL; if(i==1){ return list=list->next; } int j=2; while(p!=NULL){ if(i==j){ p->next=p->next->next; break; } p=p->next; j++; } free(p); return list; } 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/
- 本文版权归作者和博客园共有,如需转载,请联系 pingzhao1990#163.com