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;  
    }  

    执行结果:



  • 相关阅读:
    11种常用css样式之background学习
    11种常用css样式之开篇文本字体学习
    学习css常用基本层级伪类属性选择器
    学习了解CSS3发展方向和CSS样式与优先级
    常见CSS3选择器和文本字体样式汇总
    简单了解css3样式表写法和优先级
    4——PHP比较&&复制运算符
    虚基类
    string类中getline函数的应用
    string类应用举例
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4057968.html
Copyright © 2011-2022 走看看