c - 将链表中的节点移动到前面,以便将其移动到不同的链表
问题描述
我必须编写一个程序,其中每个玩家手上都有一定数量的牌,每轮他们必须抽一张牌然后丢弃一张牌,因为他们必须在每轮结束时保持一定数量的牌。
我所写的内容对于第一个玩家(第一回合)完美无缺,但随后它到达第二个玩家(第二回合)并且程序结束。调试后发现是因为无法读取hand2
。
是因为指针没有指向正确的地址吗?我不确定如何解决这个问题。
void discardCard(struct card_s** hand1, struct card_s** hand2,.., struct card_s** pack, struct card_s** discardPile, ...) {
struct card_s* prev = NULL;
struct card_s* traverseOne = NULL; //transverse list nodes one by one
struct card_s* skiptrasverseOne = NULL; // to transverse list nodes by skipping one
/*
* identify which card the user wants to discard
* move to the front of the hand
* move it to discardPile
*/
/*FIRST PLAYER WORKS JUST FINE*/
if (currentPlayer == 0) {
traverseOne = (*hand1);
skiptrasverseOne = (*hand1);
//finds the node of where the desired card to be discarded is
while (skiptrasverseOne != NULL && skiptrasverseOne->next != NULL) {
prev = traverseOne;
skiptrasverseOne = skiptrasverseOne->next->next->next;
traverseOne = traverseOne->next;
}
//moves node to head
prev->next = prev->next->next;
traverseOne->next = (*hand1);
(*hand1) = traverseOne;
}
//SECOND PLAYER - PROGRAM ENDS AT THE WHILE LOOP BECAUSE IT CANNOT READ hand2.
else if (currentPlayer == 1) {
traverseOne = (*hand2);
skiptrasverseOne = (*hand2);
while (skiptrasverseOne != NULL && skiptrasverseOne->next != NULL) {
prev = traverseOne;
skiptrasverseOne = skiptrasverseOne->next->next->next;
traverseOne = traverseOne->next;
}
prev->next = prev->next->next;
traverseOne->next = (*hand2);
(*hand2) = traverseOne;
}
...
}
解决方案
推荐阅读
- python - 我想使用 sympy 在 python 中的三个对象之间插入两个相等
- vim - 剪贴板中的粘贴路径修改为相对于 vim 中的当前缓冲区
- reactjs - 在 React 中使用 axios 调用 API 没有响应
- javascript - 日期选择器 - 要选择的日期 --> 从今天起 2 天
- angular - 运行 ng e2e 命令后找不到模块“src/environments/environment”
- nextflow - Nextflow deepTools 指纹
- python - Django使用通过外键连接的另一个模型中的字段过滤数据
- python-3.x - 如何在python中反转字符串?
- r - r 绘图功能问题
- javascript - React - 使用 papaparse 将一些 csv 列转换为数组