反转一个链表。递归算法

//2、反转一个链表。递归算法。    
#include <stdio.h>  
#include <string.h>

struct List
{
	List(char * name)
	{
		strcpy(this->name,name);
		pnext=NULL;
	}
	List* InsertSbAfterMe(List* Sb)
	{
		Sb->pnext=this->pnext;
		this->pnext=Sb;
		return Sb;
	}

	char name[256];
	List* pnext;
};
List* printAll(List* Plist); 
List*   resverse(List*   l);
List*   Myreverse(List*   I,bool isFirstTwo=false);   
void main()
{
    List* PlistA=new List("zhao");
	List* tmpList=PlistA->InsertSbAfterMe(new List("qian"));
	tmpList=tmpList->InsertSbAfterMe(new List("shun"));
	tmpList=tmpList->InsertSbAfterMe(new List("Li"));
	printf("printAll(PlistA)\n");
	printAll(PlistA);
//
	List* PlistB=resverse(PlistA);
	printf("printAll(PlistB)\n");
	printAll(PlistB);
	//*
	List* PlistC=Myreverse(PlistB,true);
	printf("printAll(PlistC)\n");
	printAll(PlistC);
	//*/
}

List* printAll(List* Plist)
{
	List* walker=Plist;
	while(walker)
	{
		printf("%s ",walker->name);
		walker=walker->pnext;
	}
	printf("\n");
	return Plist;
}

List*   resverse(List*   l)   
{
	static int counter=0;
	printf("%d\n",++counter);
    if(!l   ||   !l->pnext)   return   l;   
	       
        List*   n   =   resverse(l->pnext);   
        l->pnext->pnext   =   l;   
        l->pnext=NULL;   
    return   n;   
}   

List*   MyRev(List*   I)   
{ 
	static int counter=0;
	printf("%d\n",++counter);
    if(!I   ||   !I->pnext)   return   I;   

	List* OIdI=I;
	List* NewI=I->pnext;
    List*   n   = MyRev(NewI);       
    NewI->pnext   =  OIdI;   
    OIdI->pnext=NULL;   
    return  n;  
} 

List*   Myreverse(List*   I,bool isFirstTwo)   
{
    if(!I || !I->pnext)return I;
	List*   OldI=I;
	List*   NewI=I->pnext;
	//*
	if(isFirstTwo)
	{
	OldI->pnext=NULL;
	isFirstTwo=false;
	}
	//*/

	List* theLast=Myreverse(NewI);
	NewI->pnext=OldI;
	//OldI->pnext=NULL;

	return theLast;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值