zoukankan      html  css  js  c++  java
  • 两种方法求单链表逆序

    1 递归,非常easy

    代码:

    #include<iostream>  
    
    using namespace std;  
    
    typedef struct node{
    	int data;
    	struct node * pNext;
    }Node ,*pNode;
    
    void createNode(pNode & pHead){
    	int temp;
    	scanf("%d",&temp);
    	pNode p,q;
    	bool isFirst = true;
    	while(temp){
    		if(isFirst){
    			p=q=pHead=(pNode)malloc(sizeof(Node));
    			pHead->data = temp;
    			isFirst = false;
    		}else{
    			q = new Node();
    			q->data = temp;
    			q->pNext=NULL;
    			p->pNext = q;
    			p =q;
    		}
    		scanf("%d",&temp);
    	}
    
    }
    void print(pNode pHead){
    	if(pHead){
    		cout<<pHead->data<<" ";
    		print(pHead->pNext);
    	}else
    	return;		
    }
    
    void reverse(pNode pcur,pNode & pHead){
    	if((NULL == pcur) ||( NULL == pcur->pNext)){
    			pHead = pcur;
    			return;
    	}else{
    		pNode pnext = pcur->pNext;
    		reverse(pnext,pHead);
    		pnext->pNext = pcur;
    		pcur->pNext = NULL;
    	}
    }
    int main()  
    {  
    	pNode pHead = NULL;
    	createNode(pHead);
    	cout<<"原链表:"<<endl;
    	print(pHead);
    	cout<<"翻转:"<<endl;
    	reverse(pHead,pHead);
    	print(pHead);
        return 0;  
    }  

    执行结果:


    2 不是递归,循环:

    #include<iostream>  
    
    using namespace std;  
    
    typedef struct node{
    	int data;
    	struct node * pNext;
    }Node ,*pNode;
    
    void createNode(pNode & pHead){
    	int temp;
    	scanf("%d",&temp);
    	pNode p,q;
    	bool isFirst = true;
    	while(temp){
    		if(isFirst){
    			p=q=pHead=(pNode)malloc(sizeof(Node));
    			pHead->data = temp;
    			isFirst = false;
    		}else{
    			q = new Node();
    			q->data = temp;
    			q->pNext=NULL;
    			p->pNext = q;
    			p =q;
    		}
    		scanf("%d",&temp);
    	}
    
    }
    void print(pNode pHead){
    	if(pHead){
    		cout<<pHead->data<<" ";
    		print(pHead->pNext);
    	}else
    	return;		
    }
    
    pNode reverse(pNode & pHead){
    	if(NULL == pHead || NULL == pHead->pNext){
    		return pHead;
    	}
    	pNode p1,p2,p3;
    	p1=pHead;
    	p2=pHead->pNext;
    	while(p2){
    		p3=p2->pNext;
    		p2->pNext = p1;
    		p1 = p2;
    		p2 = p3;
    	}
    	pHead->pNext = NULL; /*设置链表尾*/
    	pHead = p1;  /*调整链表头*/
    	return pHead;
    }
    int main()  
    {  
    	pNode pHead = NULL;
    	createNode(pHead);
    	cout<<"原链表:"<<endl;
    	print(pHead);
    	cout<<"翻转:"<<endl;
    	reverse(pHead);
    	print(pHead);
        return 0;  
    }  

    执行结果:



  • 相关阅读:
    torch 入门
    编译CDH Spark源代码
    Marsedit 破解版下载(3.5.6)
    程序员必备:技术面试准备手册
    360私有化详细资料曝光:抵押总部大楼(转)
    底层软件工程师的一次冒险经历
    这十种算法撑起了整个世界
    秒杀系统架构分析与实战(深度学习资料)
    北京程序员 VS 硅谷程序员(转)
    Timestamp 使用
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4057968.html
Copyright © 2011-2022 走看看