C中的链接列表结构。仅更改一个列表中的共享元素

时间:2020-05-19 00:43:27

标签: c pointers struct linked-list

我在C中有这些结构:

typedef struct team{
    char *name;
    int wins;
} *pTeam;

typedef struct node_team{
    pTeam team;
    struct node_team *next;
} *link_team;

所以我有很多这样的团队,我将它们放在链表中,链表中的每个元素都是一个link_team,因此如果有两个link_team,分别为AB我想将B放在A之后,我做A->next=B。但是,我有2个列表,并且两个列表共享一些相同的元素,因此,如果两个列表中都包含A,并且在一个列表中的B之后想要A,我不会不想在其他列表中。但是,由于我们在讨论指针,并且两个列表都具有指向结构A的指针,因此通过在一个列表中执行A->next=BB被链接到A自动也在其他列表中。我该如何预防?

1 个答案:

答案 0 :(得分:0)

next指针使链接列表成为链接列表。因此,您无法按照自己的方式来混合列表。但是,除了指向下一个对象的指针外,节点包含的唯一数据是pTeam对象。可以轻松地在不同的列表之间共享它(尽管您需要小心)。

... // Suppose you already have five pTeam pointers: p1, ..., p5

link_team *head1, *head2, *node1, *node2, *node3, *node4;

head1=malloc(sizeof(*link_team));
head2=malloc(sizeof(*link_team)); // I should be checking these return values but oh well.

head1->team=p1;
head2->team=p2;

node1=malloc(sizeof(*link_team));
node1->team=p3;
head1->next=node1;

node2=malloc(sizeof(*link_team));
node2->team=p3;
head2->next=node2;

node3=malloc(sizeof(*link_team));
node3->team=p4;
node3->next=NULL;
node1->next=node3;

node4=malloc(sizeof(*link_team));
node4->team=p5;
node4->next=NULL;
node2->next=node4;