trekhleb / javascript-algorithms

📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings
MIT License
185.07k stars 29.85k forks source link

Small code errors for the LinkedList and HashTable data structures #1033

Open AlexIoanGheorghita opened 1 year ago

AlexIoanGheorghita commented 1 year ago

Hello!

As I went through the code for these data structures, I noticed two small errors:

1) inside the delete() method of the LinkedList data structure, there is a line of code that says: while (this.head && this.compare.equal(this.head.value, value)). However, instead of a while it should be an if statement.

2) inside the constructor() of the HashTable data structure, we initialize an array in the following way: this.buckets = Array(hashTableSize).fill(null).map(() => new LinkedList());. However, the Array() constructor should have the new keyword in front of it.

If you guys feel that these are important fixes to you and if you allow me to help, I would be more than glad to contribute by creating a pull request with the changes made.

mithleshgupta commented 1 year ago

I can do this , can you assign this to me

Saminakalwar commented 1 year ago

Hello ..Its SSOC Contributor .I can easily do this . .Can u assign me issue under SSOC'23 label please ?

sujitmahapatra commented 9 months ago

For the LinkedList data structure, you're correct that the while statement should be replaced with an if statement. Here's the corrected delete method:

delete(value) {
    if (!this.head) {
        return;
    }

    if (this.compare.equal(this.head.value, value)) {
        this.head = this.head.next;
        return;
    }

    let current = this.head;
    while (current.next) {
        if (this.compare.equal(current.next.value, value)) {
            current.next = current.next.next;
            return;
        }
        current = current.next;
    }
}

For the HashTable data structure, you're correct that the Array() constructor should have the new keyword. Here's the corrected constructor:

constructor(hashTableSize) {
    this.buckets = new Array(hashTableSize).fill(null).map(() => new LinkedList());
    this.keys = {};
}