zoukankan      html  css  js  c++  java
  • 单向链表的逆序操作

    #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("
    ");
    }
    
    
    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);
    }
    	
    
  • 相关阅读:
    Educational Codeforces Round 86 (Rated for Div. 2)
    第十六届东南大学大学生程序设计竞赛(春、夏季)
    Codeforces Round #643 (Div. 2)
    [P3384] 【模板】轻重链剖分
    [BJOI2012] 连连看
    [CF1349C] Orac and Game of Life
    Codeforces Round #641 (Div. 2)
    [TJOI2018] 数学计算
    [CF1157D] N Problems During K Days
    [CF1163C1] Power Transmission (Easy Edition)
  • 原文地址:https://www.cnblogs.com/chenpingzhao/p/4564863.html
Copyright © 2011-2022 走看看