码迷,mamicode.com
首页 > 其他好文 > 详细

单向链表的逆序操作

时间:2015-06-10 01:07:23      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

废话不多说,直接看代码

#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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!