我在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,分别为A
和B
我想将B
放在A
之后,我做A->next=B
。但是,我有2个列表,并且两个列表共享一些相同的元素,因此,如果两个列表中都包含A
,并且在一个列表中的B
之后想要A
,我不会不想在其他列表中。但是,由于我们在讨论指针,并且两个列表都具有指向结构A
的指针,因此通过在一个列表中执行A->next=B
,B
被链接到A
自动也在其他列表中。我该如何预防?
答案 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;