c - 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 A
,B
如果我想放在B
后面A
,我做A->next=B
。但是,我有 2 个列表,并且两个列表共享一些相同的元素,所以如果我A
在这两个列表中都有并且想要B
在A
一个列表中之后,我不希望它在另一个列表中。但是,由于我们正在讨论指针,并且两个列表都有指向 struct 的指针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;
推荐阅读
- reactjs - 我们如何更改反应材料 ui 表中标题的字体粗细?
- python - 在 javascript var 和 jscript 标签 Python BS4 中获取 json
- intellij-idea - build.gradle 无法识别 Closure
- visual-studio - 如何为 ToolStripDropDownButton 上的 MenuItem 创建事件处理程序?
- java - 在填充editText之前不会关闭弹出窗口的警报对话框按钮
- flutter - 在颤动文本字段中输入时变量被重置
- bash - 为标志查找文件(-i -d -p -a 等)
- swift - 新窗口总是以设定的大小打开
- wordpress - 如何在单击 url (wordpress) 时到达目标 # 锚点?
- python - 如何使用熊猫减去数据集中所有列的分组数据中的第一个和最后一个值