这个程序刚开始写完的时候爆出了一堆bug。
有几点要说一下,作为初学者,应该是会不经意间就范的。
1.对循环链表的空判断。
当循环链表为空的时候,自身的下一指针指向自身。
2.释放链表后忘记对最后的指针进行循环设置。
#if 0
程序名称:poker
作用:模拟魔术师发牌
描述:第一张牌为1,第二张牌就要从第二张重新数,为2.第三张就要从四张重新数。
以此类推,大致如下,括号内的值表示位置:
1(1) -> ?(2) -> 2(3) -> ?(4) -> ?(5) -> 3(6).....
#endif
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}Node, *LinkList;
#if 0
这是注释,用宏来写注释不会出现嵌套注释出现的错误。比如 /*/**/*/ 就会出现错误。
名称:CreateList[初始化链表]
调用:CreateList(LinkList L)
作用:生成并初始化13个节点的循环链表
参数:LinkList L,头结点
#endif
void CreateList(LinkList L)
{
LinkList p, r;
int PokerNum = 12; //牌数。每个花的牌总数为13张
//由于在调用前申请了一个节点所以这里设置为12张
L->data = 0;
r = L;
while (PokerNum)
{
p = (LinkList)malloc(sizeof(Node));
if(!p)
{
printf("申请内