|
|
- const readline = require("readline");
- const rl = readline.createInterface(process.stdin, process.stdout);
-
- class Node {
- previous;
- value;
- next;
- }
-
- class LinkList {
- head;
- length;
- constructor(length) {
- // 还是需要头结点,此时head表示其中第0个结点,length必须大于0
- this.length = length;
- this.head = new Node();
- // this.head.value = 1;
- let current, previous = this.head;
- for (let i = 1; i <= this.length; i++) {
- current = new Node();
- current.value = i;
- previous.next = current;
- current.previous = previous;
- previous = current;
- }
- current.next = this.head.next;
- this.head.next.previous = current;
- // this.head.next = this.current; // 不能多重赋值,赋值语句会返回undefined
- this.head.previous = current;
- }
- remove(node) {
- node.previous.next = node.next;
- node.next.previous = node.previous;
- // delete node; // JavaScript里应该无法直接删除
- this.length--;
- return true;
- }
-
- // 找到从当前结点开始第n个结点(可以为负数),当前结点是第0个
- // 并且再向后返回一个结点
- get_n_after_node(node, n) {
- let property_name = "next";
- if (n < 0) {
- property_name = "previous";
- n = -n;
- }
- if (this.length < 3) return false;
- for (let i = 0; i < n; i++) { // 向后走n个,例如从0开始,到3结束
- node = node[property_name];
- }
- return node;
- }
- }
-
- function main(people_num, num1) {
- let link_list = new LinkList(people_num);
- let current = link_list.head;
- let temp;
- while (true) {
- temp = link_list.get_n_after_node(current, num1);
- if (!temp) break;
- current = temp;
- link_list.remove(current);
- }
- // 此时current是最后一个被删掉的结点,它的next和previous都是存在的结点
- current = current.next;
- link_list.head.next = current;
- for (let i = 0; i < link_list.length; i++) {
- console.log(current.value);
- current = current.next;
- }
- }
-
- function input(prompt) {
- return new Promise((resolve) => {
- rl.question(prompt, (answer) => {
- resolve(answer);
- });
- });
- }
-
- async function main_() {
- people_num = parseInt(await input("输入人数"));
- num1 = parseInt(await input("输入第一个数字"));
- main(people_num, num1);
- rl.close();
- }
-
- main_()
-
- // 输入人数41
- // 输入第一个数字3
- // 16
- // 31
|