首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中的链表结构仅在一个列表中更改共享元素

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

Stack Overflow用户
提问于 2020-05-19 08:43:27
回答 1查看 39关注 0票数 1

我在C中有这些结构:

代码语言:javascript
运行
复制
typedef struct team{
    char *name;
    int wins;
} *pTeam;

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

所以我有不同的团队,我把它们放在一个链表中,链表中的每个元素都是一个团队,所以有两个link_ link_team,AB,如果我想把B放在A之后,我会做A->next=B。但是,我有两个列表,这两个列表共享一些相同的元素,所以如果我在两个列表中都有A,并且希望在一个列表中在A之后使用B,那么我不希望在另一个列表中使用它。但是,由于我们讨论的是指针,并且两个列表都有指向结构A的指针,因此通过在一个列表中执行A->next=BB也会自动链接到另一个列表中的A。我如何防止这种情况发生?

EN

回答 1

Stack Overflow用户

发布于 2020-05-19 08:58:50

next指针使链表成为链表。所以,你不能用你正在做的方式混合列表。但是,除了指向下一个对象的指针之外,节点包含的唯一数据是pTeam对象。这可以很容易地在不同的列表之间共享(尽管您需要小心)。

代码语言:javascript
运行
复制
... // 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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61881370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档