【问题描述】遍历输出带头结点的循环单链表的所有结点,要求使用递归算法(注意:递归算法)
【输入形式】
【输出形式】
【样例输入】5
15 16 17 18 19
【样例输出】15 16 17 18 19
【样例说明】链表长度为5
【运行结果如下】
【代码如下】
#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int ElemType;
/*线性表的单链表存储结构 */
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
/*初始化循环单链表*/
void InitList_L(LinkList &L,int n)
{
int i;
LinkList p,pre;
L = (LinkList)malloc(sizeof(LNode));
pre = L; //当前指针
for (i=0; i<n; i++){
p = (LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
pre->next = p;
p->next = NULL;
pre = pre->next; //当前指针后移
}
pre->next = L; //完成循环链表
}
/*递归输出*/
void recursion_L(LinkList &L,LinkList &pre)
{
if (L == pre){
return; //终止递归
}else {
printf("%d ",pre->data);
recursion_L(L,pre->next); //p指向下一个结点
}
}
int main()
{
LinkList L;
int n;
scanf("%d",&n);
InitList_L(L,n);
recursion_L(L,L->next);
return 0;
}
本文章仅供学习和参考!
欢迎交流~