基于数组实现队列的问题,在求解 击鼓传花 时遇到问题,求大神帮看代码
//几个朋友玩一个游戏,围成一个圈,开始数数,数到某个数字时,对应位置的人淘汰,直到只剩一个人时游戏结束,并求出剩余的那一个人原来的位置// 基于数组封装队列,该方法性能不高,只为学习
function Queue(){
this.list = []
Queue.prototype.enqueue = function(params){
this.list.push(params)
}
Queue.prototype.dequeue = function(){
this.list.shift()
}
Queue.prototype.front = function(){
return this.list[0]
}
Queue.prototype.size =function(){
return this.list.length
}
Queue.prototype.isEmpty = function(){
return this.list.length === 0
}
Queue.prototype.toString = function(){
let s = ''
for(var i = 0; i < this.list.length; i++){
s += this.list[i] + ' '
}
return s
}
}
//nameList为玩游戏的人组成的数组, num为数到的数字
//思路:1、num之前的人不会被淘汰,放入队列最后面。 2、删除num位置的元素。 3、从新开始数数,重复1、2步骤,直到队列中仅剩一人
function DrummingToPassFlowers(nameList, num) {
// 1、创建队列
var queue = new Queue();
// 2、将数组nameList中的元素添加进队列中
nameList.forEach(item => {
queue.enqueue(item)
})
// 5、重复执行3、4,直到队列中只剩一人
while(queue.size() > 1){
// 3、将num之前的元素添加到队列末尾
for(var i = 0; i < num-1; i++){
// 经验证,此处出问题,但是不知道为什么
queue.enqueue(queue.dequeue())
}
// 4、删除num位置的元素
queue.dequeue()
}
var endName = queue.front()
return nameList.indexOf(endName)
}
var na = ['qoqo', 'wowo', 'eoeo', 'roro', 'toto', 'yoyo']
alert(DrummingToPassFlowers(na, 4));