如何将一个链表作为一个函数的参数

 我来答
heart阿飞55
2018-09-05 · TA获得超过1086个赞
知道大有可为答主
回答量:3030
采纳率:82%
帮助的人:555万
展开全部
这就是个猴子选大王的游戏变形
游戏描述:
一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
其实这个问题就是约瑟夫环的应用,主要应用循环链表来解决。以下是它的源程序:
#includeiostream.h
class node //建立节点类
{
private:
node *next;//nesxt为节点内的指针
public:
int data;//节点内的数据域
node(void);//节点构造函数
node(int obj);//带一个参数的节点构造函数
insertnode(node *p);//插入节点函数声明 *p为指针类型参数
node *deletenode(void);//删除节点函数声明
node *nextnode(void) const; //查找下一节点函数声明 返回一个node类型的指针变量
};
//具体函数实现
node::node(void)//节点构造函数实现
{
next=this;//使节点的指针指向自己
}
node::node(int obj)//带一个参数的节点构造函数实现
{
next=this; //同上
data=obj;
}
node::insertnode(node *p)//插入节点函数实现
{
p-next=next;
next=p;
}
node *node::deletenode(void)//删除节点函数实现
{
node *ptr=next;//*ptr指针指向要删除的节点
if(ptr==this) //如果ptr指向自己,即循环链表中没有节点可删除,然后返回
return NULL;
next=ptr-next;//使前一个节点的指针(即next)指向要删除节点的下一个节点
return ptr; //返回要删除的节点指针
}
node *node::nextnode(void) const//查找下一节点函数实现
{
return next;
}
void creatmonkey_list(node *header,int n)//建立循环链表
{
node *current_ptr=header,*newnode_ptr;//current_ptr为当前指针,newnode_ptr为新建节点的指针
int i;
for(i=1;i=n;i++)
{
newnode_ptr=new node(i);//创建一个新节点
current_ptr-insertnode(newnode_ptr);//将这个节点插入到循环链表中
current_ptr=newnode_ptr;//向后移动指针
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式