递归的大量应用----单链表的逆置

//用递归实现逆置单链表 


**typedef struct Node
{
	int data;
	struct Node *next;
}Node;
typedef Node * Link;
//单链表的逆置,缺点就是必须是 
//带头结点的单链表可是是空表 
//不带头结点的单链表至少需要一个结点 
void __reversed__(Link Prior_Link,Link Now_Link,Link Link_Head);
//单链表的递归输出 
void __reversed__Print__(Link Now_Node);
int main()
{
	
	//printf("hello world\n");
	
	Link Head = NULL,Tail,p;
	
	int i;
	
	for(i = 10;i >= 1;i--)
	{
		p = (Link)malloc(sizeof(Node));
		p->data = i;
		p->next = NULL;
		if(Head)
		{
			p->next = Head;
			Head = p;
		}
		else
		{
			Head = p;
		}
	}
	
	p = Head;
	while(p)
	{
		printf("%d ",p->data);
		if(p->next == NULL)
		{
			Tail = p;
		}
		p = p->next;
	}
	
	//printf("\nTail:%d\n",Tail->data);
	
	/*
	__reversed__(Head,Head->next,Head);
	
	
	printf("\n");
	p = Tail;
	while(p)
	{
		printf("%d ",p->data);
		p = p->next;
	}
	*/
	printf("\n");
	__reversed__Print__(Head); 
	
	return 0;
} 
//递归实现单链表的逆置输出 
void __reversed__Print__(Link Now_Node)
{
	if(Now_Node)
	{
		__reversed__Print__(Now_Node->next);
		printf("%d ",Now_Node->data);	
	}
}
//递归实现单链表的逆置
void __reversed__(Link Prior_Link,Link Now_Link,Link Link_Head)
{
	if(Now_Link)
	{
		__reversed__(Now_Link,Now_Link->next,Link_Head);
		Now_Link->next = Prior_Link;
	}
	if(Prior_Link == Link_Head)
	{
		Link_Head->next = NULL;
	}
}**

发布了17 篇原创文章 · 获赞 1 · 访问量 293

猜你喜欢

转载自blog.csdn.net/xjlovewjh/article/details/103775228