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);
    }
    	
    
  • 相关阅读:
    禁止 FireFox 提示安装 Flash 插件
    MongoDb不能同步,可能是服务器时间不一致
    simpletest的一点经验:0个测试、1个Case的情况
    VIM学习笔记:列编辑
    使用 nginx 做http代理
    VirtualBox非常简单的克隆虚拟机的功能
    PDOStatement的HY093错误原因及解决办法
    火狐英文原版的下载地址
    修改 PHP 的 memory_limit 内存限定
    TEA 加密解法,统一了C语言、Java与PHP的运算结果
  • 原文地址:https://www.cnblogs.com/chenpingzhao/p/4564863.html
Copyright © 2011-2022 走看看