10.内存释放和游戏状态的判断
10.内存释放和游戏状态的判断
内存释放
因为豌豆是链表,所以我们需要及时释放内存,避免过高内存占用
1 | void deletePeaAfterNode(peas* head) {//删除已经消失的豌豆节点 |
这段代码删除除头节点外状态为0的豌豆。如果当前节点豌豆状态为0 ,则连接前后两个节点。以此类推删除所有状态为0的节点。
- 首先检查链表是否至少有两个节点:如果链表为空 (head == NULL) 或者只有一个节点 (head->next == NULL),函数什么也不做,直接返回。这是因为函数设计为从第二个节点开始检查,如果链表不满足这个最基本的条件,就没有必要进行下一步操作。
- 初始化遍历指针:current 指针设置为从链表的第二个节点开始 (head->next),而 prev 指针保持在 current 的前一个节点,即链表的头节点 (head)。
- 遍历链表;如果当前节点 (current) 的 status 等于 0,表示这个节点代表的豌豆“已经消失”,需要被删除。
- 删除:连接前后两个节点,这样就从链表中移除了current 指向的节点。
- 释放内存:使用 free(current) 释放被删除节点的内。
- 如果当前节点不需要删除:如果 current 节点的 status 不等于 0,即这个节点不需要被删除,prev 指针移动到 current,current 指针移动到 current->next,以继续向链表后方遍历。
游戏状态的判断
1 | int checkGameStatus() {//1,赢,2,输 |
如果这个函数返回1表示游戏胜利,返回2表示游戏失败。