1. 递归逆序打印字符串
void reverse(char *s)
{
if(*s != )
{
reverse(++s);
putchar(*(s-1)); // 巧妙的利用栈的先进后出的特点
}
}
2. 递归方式将链表逆序
// p 为指向非空单链表中第一个结点的指针,本算法逆转链表并返回逆转后的头指针。基本思路是:如果链表中只有一个结点,则空操作,否则先逆转a2开始的链表,然后将 a1联接到逆转后的链表的表尾(即a2)之后。
LinkList reverse(LinkList p)
{
if(p->next == NULL) return p; // 链表中只有一个结点,逆转后的头指针不变
else
{
q = p->next; // q为链表(a2,...an)的头指针
h = reverse(q); // 逆转链表(a2,...an),并返回逆转后的头指针
q->next = p; // 将a1联接在a2之后
p->next = NULL;
return h; // (a2,...,an)逆转表的头指针即为(a1,a2,...,an)
}
}
3. 递归方式合并两个链表
Node *MergeRecursive(Node *head1, Node *head2)
{
if(head1 == NULL)
return head2;
if(head2 == NULL)
return head1;
Node *head = NULL;
if(head1->data < head2->data)
{
head = head1;
head->next = MergeRecursive(head1->next, head2);
}
else
{
head = head2;
head->next = MergeRecursive(head1, head2 ->next );
}
return head;
}
void reverse(char *s)
{
if(*s != )
{
reverse(++s);
putchar(*(s-1)); // 巧妙的利用栈的先进后出的特点
}
}
2. 递归方式将链表逆序
// p 为指向非空单链表中第一个结点的指针,本算法逆转链表并返回逆转后的头指针。基本思路是:如果链表中只有一个结点,则空操作,否则先逆转a2开始的链表,然后将 a1联接到逆转后的链表的表尾(即a2)之后。
LinkList reverse(LinkList p)
{
if(p->next == NULL) return p; // 链表中只有一个结点,逆转后的头指针不变
else
{
q = p->next; // q为链表(a2,...an)的头指针
h = reverse(q); // 逆转链表(a2,...an),并返回逆转后的头指针
q->next = p; // 将a1联接在a2之后
p->next = NULL;
return h; // (a2,...,an)逆转表的头指针即为(a1,a2,...,an)
}
}
3. 递归方式合并两个链表
Node *MergeRecursive(Node *head1, Node *head2)
{
if(head1 == NULL)
return head2;
if(head2 == NULL)
return head1;
Node *head = NULL;
if(head1->data < head2->data)
{
head = head1;
head->next = MergeRecursive(head1->next, head2);
}
else
{
head = head2;
head->next = MergeRecursive(head1, head2 ->next );
}
return head;
}
转载于:https://blog.51cto.com/qq164587043/77787