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



我在 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,AB,如果我想把B放在A之后,我做A->next=B。但是,我有 2 个列表,并且两个列表共享一些相同的元素,因此如果我在两个列表中都有A并且想要在一个列表中AB,我不希望它在另一个列表中。但是,由于我们谈论的是指针,并且两个列表都有指向结构A的指针,通过在一个列表中执行A->next=BB也会自动链接到另一个列表中的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;

相关内容

  • 没有找到相关文章

最新更新