SharedSchoolSpace/作业/数据结构-金健/JavaScript/第二章作业1.js

94 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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