我在 C 中有这些结构:
typedef struct team{
char *name;
int wins;
} *pTeam;
typedef struct node_team{
pTeam team;
struct node_team *next;
} *link_team;
所以我有各种各样的团队,我把它们放在一个链表上,链表的每个元素都是一个link_team,所以有 2 个link_team,A
和B
,如果我想把B
放在A
之后,我做A->next=B
。但是,我有 2 个列表,并且两个列表共享一些相同的元素,因此如果我在两个列表中都有A
并且想要在一个列表中A
后B
,我不希望它在另一个列表中。但是,由于我们谈论的是指针,并且两个列表都有指向结构A
的指针,通过在一个列表中执行A->next=B
,B
也会自动链接到另一个列表中的A
。我该如何防止这种情况?
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;