如何在不更改原始列表的情况下前进链表的副本

问题描述 投票:0回答:1

所以,我的问题是,如何在不更改原始列表的情况下推进链接列表的副本。我有点理解为什么会发生这种情况,但我不知道一种避免这种情况发生的方法。

这就是我所做的,当我调用使用这些列表的另一个函数时,它们不存在。

  typedef struct _edgeList
    {
        int target;
        char* tCity;
        char* country;
        int population;
        float weight;
        struct _edgeList *next;
    } EdgeList;

    typedef struct _collisionList
    {
        int id;
        char *city;
        char* country;
        int population;
        EdgeList *edges;
        struct _collisionList *next;
    } CollList;

    void CityWithMostTargets(CollList** hash)
{
    CollList** aux = hash;
    int i = 0;
    int edges = 0;
    int major = 0;
    char* city;

    for(i = 0; i < HASH_SIZE; i++)
    {
        while(aux[i])
        {
            if(aux[i]->edges)
            {
                edges = CountEdges(hash[i]->edges);
            }

            if(edges > major)
            {
                major = edges;
                city = strdup(hash[i]->city);
            }

            if(!aux[i]->next)
                break;

            aux[i] = aux[i]->next;
        }
    }
    aux = hash; 

    printf("City: %s\nNumber of edges: %d", city, major);
    getchar();
}
c pointers linked-list
1个回答
0
投票

您可以定义另一个变量来保存要使用的aux[i]的值。

for(i = 0; i < HASH_SIZE; i++)
{
    CollList* a = aux[i];
    while (a)
    {
        // etc.

并替换该循环中aux[i]的其他用法以使用a

© www.soinside.com 2019 - 2024. All rights reserved.