c++怎么历遍输出带头结点的循环单链表的所有结点,用递归算法怎么解决,麻烦给给思路,谢谢
记录头结点位置,当节点循环到头结点的时候结束递归即可。
代码如下:
#include <iostream>
using namespace std;
typedef struct _node
{
int data;
struct _node* next;
}LinkNode;
//递归显示
void showList(LinkNode* head)
{
static LinkNode* node = 0;
if(node == 0)
{
node = head;
head = head->next;
}
if(node == head)
return;
else
{
if(head == node->next)
cout << head->data;
else
cout << " "<<head->data;
head = head->next;
showList(head);
}
}
int main()
{
LinkNode* head,*p,*t;
int i,n;
head = new LinkNode;
head->next = 0;
p = head;
//输入n
cin >> n;
for(i=0;i<n;i++)
{
t = new LinkNode;
t->next = 0;
cin >> t->data; //输入数据
p->next = t;
p = t;
}
//构建循环链表
p->next = head; //尾结点链接到头结点
showList(head);
return 0;
}
#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;
}