//用递归实现逆置单链表
**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;
}
}**
递归的大量应用----单链表的逆置
猜你喜欢
转载自blog.csdn.net/xjlovewjh/article/details/103775228
今日推荐
周排行