0504|1823. 找出游戏的获胜者
这道题使用队列也可以。
- 遍历 quene 时,从队尾拿出一个成员,然后再从对头插入。如此循环。
这里使用的是链表:
var findTheWinner = function (n, k) {
// 边界
if (k === 1) return n;
// 构造一个循环链表
const head = new TreeNode(1);
let point = head;
for (let i = 2; i <= n; i++) {
point.next = new TreeNode(i);
point = point.next;
}
point.next = head;
// 循环
point = head;
while (point !== point.next) { // 当一个结点.next指向自己时,表明链表成员只有一个。
let pre = point; // pre 用于删除结点
for (let i = 0; i < k - 1; i++) { // 遍历,point 指向了待删除节点
pre = point;
point = point.next;
}
// 删除结点
pre.next = point.next;
point = pre.next;
}
return point.val;
// 创建一个结点
function TreeNode(val) {
this.val = val;
this.next = null;
}
};