c++的相关问题,会的看看

c++怎么历遍输出带头结点的循环单链表的所有结点,用递归算法怎么解决,麻烦给给思路,谢谢

记录头结点位置,当节点循环到头结点的时候结束递归即可。

img

代码如下:

#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;
}