首页 > 解决方案 > 打印列表的循环单链表问题

问题描述

我的问题是编译后的程序没有显示列表中的最后一个元素。除了接下来我将提供的功能之外,我还有一个初始化列表的函数和另一个用于向列表添加元素的函数,它们工作得很好,现在我知道这是因为,比如说我输入了 4 个元素“afficher_liste”函数(应该打印列表)仅打印 3。如果我添加第 5 个元素,“afficher_liste”函数将打印 4 个元素,如果我添加第 6 个元素,它将打印 5 个元素。新的最后一个元素进入列表并且是其中的一部分,它只是没有被打印出来。我希望我能够解释这个问题..

   typedef struct{
    char nom[20];
    float surface;
    int habitants;
    }ville;
    typedef struct{
     ville data;
    struct element* suivant;
    }element;

    typedef struct{
    ville* T;
    }liste;  




void afficher_ville(ville*v){
printf("****************info ville********************");
printf("le nom de la ville :%s \n", v->nom);
printf("le nombre des habitants de la ville :%d \n", v->habitants);
printf("la surface de la ville :%.2f \n", v->surface);


}
void afficher_liste(liste* l)
{
    if(l->T==NULL){exit(-1);}

    element *aide = l->T;
 int lg=0;
    do
    { lg++;
        afficher_ville(&aide->data);
        aide= aide->suivant;
    }   while(aide->suivant != l->T);

    printf("longeur* %d\n",lg);
}

标签: clinked-listcircular-list

解决方案


您的退出条件是下一个节点为空,并且按照您的逻辑,在最后一个节点上,您的应用程序将退出,而不是打印该节点。

中断递归,然后在退出应用程序之前手动打印最后一行将解决问题。

我希望这有帮助!


推荐阅读