魔术师扑克牌问题[单循环链表]

本文讨论了在解决魔术师扑克牌问题时遇到的单循环链表处理难点,包括如何正确判断链表为空以及在释放链表后进行循环指针的设置,这些都是初学者容易忽视的问题。
摘要由CSDN通过智能技术生成

这个程序刚开始写完的时候爆出了一堆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("申请内
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值