2017-10-10 3 views
1

ES6スタイルを使用すると、リンクリストを作成してnpm linterテストに渡します。JavaScriptリンクリスト:メソッドremoveHead()およびcontains()not working

class LinkedList { 
    constructor() { 
    this.head = null; 
    this.tail = null; 
    // Do not modify anything inside of the constructor 
    } 
    // Wraps the given value in a node object and adds the node to the tail of the list 
    // If the list is empty, the new element is considered the tail as 
well as the head 
    // If there is one element in the list before the new element is added, the new element becomes the tail of the list 
    addToTail(value) { 
    const newNode = { 
     value, 
     next: null 
    }; 
    if (!(this.head) && !(this.tail)) { 
     this.head = newNode; 
     this.tail = newNode; 
    } else this.tail = newNode; 
    } 
    // Removes the current head node from the list, replacing it with the next element in the list 
    // Returns the value of the removed node 
    removeHead() { 
    const removedHead = this.head.value; 
    this.head = this.head.next; 
    return removedHead; 
    } 
    // Checks the linked list for the given value 
    // Returns true if the the value is found in the list, false otherwise 
    contains(value) { 
    let found = false; 
    let checkedNode = this.head; 
    while (checkedNode) { 
     if (checkedNode.value === value) { 
     found = true; 
     } 
     checkedNode = checkedNode.next; 
    } return found; 
    } 
} 

そしてここでは、リンティングエラーです:

/* eslint-disable no-undef, no-prototype-builtins */ 
const LinkedList = require('../src/linked-list'); 

let list; 

describe('LinkedList',() => { 
    beforeEach(() => { 
    list = new LinkedList(); 
    }); 

    it('should have the methods "addToTail", "removeHead", and "contains"',() => { 
    const hasAddToTail = 
Object.getPrototypeOf(list).hasOwnProperty('addToTail'); 
    const hasRemoveHead = 
Object.getPrototypeOf(list).hasOwnProperty('removeHead'); 
    const hasContains = 
Object.getPrototypeOf(list).hasOwnProperty('contains'); 
    expect(hasAddToTail).toBe(true); 
    expect(hasRemoveHead).toBe(true); 
    expect(hasContains).toBe(true); 
    }); 

    it('should update the tail value when a new node is added',() => { 
    list.addToTail(1); 
    expect(list.tail.value).toBe(1); 
    list.addToTail(2); 
    expect(list.tail.value).toBe(2); 
    }); 

    it('should keep the same head after adding nodes',() => { 
    list.addToTail(1); 
    expect(list.head.value).toBe(1); 
    list.addToTail(2); 
    expect(list.head.value).toBe(1); 
    }); 

    it('should return true from contains if a matching value is found and false otherwise',() => { 
    list.addToTail(1); 
    list.addToTail(2); 
    list.addToTail('hello'); 
    list.addToTail(true); 
    expect(list.contains('hello')).toBe(true); 
    expect(list.contains('asdf')).toBe(false); 
    }); 

    it('should remove head when removeHead is invoked',() => { 
    list.addToTail(1); 
    list.addToTail(2); 
    expect(list.head.value).toBe(1); 
    list.removeHead(); 
    expect(list.head.value).toBe(2); 
    list.removeHead(); 
    expect(list.head).toBe(null); 
    }); 

    it('should return the head that is removed when removeHead is invoked',() => { 
    list.addToTail(1); 
    expect(list.removeHead()).toBe(1); 
    }); 

    it('should not contain removed values',() => { 
    list.addToTail(1); 
    list.addToTail(2); 
    list.addToTail(3); 
    list.addToTail(4); 
    list.removeHead(); 
    expect(list.contains(1)).toBe(false); 
    }); 
}); 

のみ2つのエラーされています

● LinkedList › should remove head when removeHead is invoked 

    TypeError: Cannot read property 'value' of null 

     at Object.<anonymous> (tests/linked-list.test.js:48:21) 

    LinkedList 
    ✓ should have the methods "addToTail", "removeHead", and "contains" (5ms) 
    ✓ should update the tail value when a new node is added (2ms) 
    ✓ should keep the same head after adding nodes (2ms) 
    ✕ should return true from contains if a matching value is found and false otherwise (4ms) 
    ✕ should remove head when removeHead is invoked (2ms) 
    ✓ should return the head that is removed when removeHead is invoked (1ms) 
    ✓ should not contain removed values (1ms) 

そして、ここではそれをテストするファイルがあるここに私が書いたコードですヘッドが削除されておらず、適切なブール値が返されていないことを示します。なぜ私は迷っているのですか。

+0

テストは次のように何を求めますか? – Timo

+0

あなたのコードを見てください。 'value'プロパティにはどこにアクセスしようとしていますか?問題はそこにあるだろう。 –

答えて

2

新しい要素を挿入するときは、nextの参照は設定しないでください。

は、代わりにこれを試してみてください:

if (!(this.head) && !(this.tail)) { 
    this.head = newNode; 
    this.tail = newNode; 
} else { 
    this.tail.next = newNode; 
    this.tail = newNode; 
} 
+0

それはうまくいった。あなたはどれくらいの間私がこれに対して頭を打っていたのか分かりません。大変感謝しています。 –

関連する問題