gpt4 book ai didi

javascript - 从链表中删除奇数/偶数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:24 27 4
gpt4 key购买 nike

这是一个带有数据和下一个属性的标准链表。

这就是我正在尝试的:

class Node {
constructor(data, next) {
this.data = data;
this.next = next;
}
}

class LinkedList {
constructor() {
this.head = null;
}

insertFirst(data) {
this.head = new Node(data, this.head);
}

size() {
let counter = 0, node = this.head;

while (node) {
counter++;
node = node.next;
}

return counter;
}

toArray() {
let node = this.head;
const result = [];

while (node) {
result.push(node.data);
node = node.next;
}

return result;
}


removeEven() {
let previous = this.head;
let node = this.head.next;

if (this.isEven(previous.data)) {
console.log('outside loop, found one: ' + previous.data)
this.head = this.head.next;
}

while (node) {
if (this.isEven(node.data)) {
console.log('found ' + node.data);
previous.next = node.next;
}

node = node.next;
}

}

isEven(num) { return num % 2 === 0 ? true : false; }
}

const q = new LinkedList();
q.insertFirst(16)
q.insertFirst(3)
q.insertFirst(4)
q.insertFirst(7)
q.insertFirst(5)
q.insertFirst(2)
q.insertFirst(1)
q.insertFirst(15)
q.insertFirst(18)
q.removeEven();

console.log(q.toArray());

输出:

outside loop, found one: 18
found 2
found 4
found 16
[ 15, 1, 2, 5, 7, 4, 3, 16 ]

所以它只删除了循环外的第一个值,我怎样才能删除其他值?

编辑:添加了完整代码,但是,它要求我添加更多文本,除了我已经添加的内容之外,我没有更多要添加的内容。

最佳答案

您应该在循环中更新previous

class Node {
constructor(data, next) {
this.data = data;
this.next = next;
}
}

class LinkedList {
constructor() {
this.head = null;
}

insertFirst(data) {
this.head = new Node(data, this.head);
}

size() {
let counter = 0,
node = this.head;

while (node) {
counter++;
node = node.next;
}

return counter;
}

toArray() {
let node = this.head;
const result = [];

while (node) {
result.push(node.data);
node = node.next;
}

return result;
}

removeEven() {
let previous = this.head;
let node = this.head.next;

if (this.isEven(previous.data)) {
console.log('outside loop, found one: ' + previous.data)
this.head = this.head.next;
}

while (node) {
if (this.isEven(node.data)) {
console.log('found ' + node.data);
previous.next = node.next;
} else {
previous = node;
}
node = node.next;
}

}

removeOdd() {
let previous = this.head;
let node = this.head.next;

if (!this.isEven(previous.data)) {
console.log('outside loop, found one: ' + previous.data)
this.head = this.head.next;
}

while (node) {
if (!this.isEven(node.data)) {
console.log('found ' + node.data);
previous.next = node.next;
} else {
previous = node;
}
node = node.next;
}

}

isEven(num) {
return num % 2 === 0 ? true : false;
}
}

const q = new LinkedList();
q.insertFirst(16)
q.insertFirst(3)
q.insertFirst(4)
q.insertFirst(7)
q.insertFirst(5)
q.insertFirst(2)
q.insertFirst(1)
q.insertFirst(15)
q.insertFirst(18)
q.removeOdd();

console.log(q.toArray());

关于javascript - 从链表中删除奇数/偶数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58365329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com