Skip to content

Commit 5ffc1da

Browse files
committed
Adding first method to retrieve first n items in the list ordered head to tail
1 parent 32e0fb2 commit 5ffc1da

File tree

2 files changed

+51
-13
lines changed

2 files changed

+51
-13
lines changed

src/index.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -209,22 +209,21 @@ export class LinkedList<T> {
209209
return currentItem.value;
210210
}
211211

212-
toArray(): T[] {
213-
return [...this];
214-
// let arr: T[] = [];
215-
// let currentItem = this._head;
212+
first(num: number): T[] {
213+
let iter = this.iterator();
214+
let result = [];
216215

217-
// while (true) {
218-
// arr.push(currentItem.value);
216+
let n = Math.min(num, this.length);
219217

220-
// if (currentItem.next) {
221-
// currentItem = currentItem.next;
222-
// } else {
223-
// break;
224-
// }
225-
// }
218+
for (let i = 0; i < n; i++) {
219+
let val = iter.next();
220+
result.push(val.value);
221+
}
222+
return result;
223+
}
226224

227-
// return arr;
225+
toArray(): T[] {
226+
return [...this];
228227
}
229228

230229
private isDuplicate(val: T): boolean {

test/LinkedListTest.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,4 +484,43 @@ describe('Linked-List Tests', () => {
484484
let result = list.toArray()
485485
expect(result.length).to.equal(0);
486486
});
487+
488+
it('should return the first n values of the list', () => {
489+
let values: number[] = [4, 5, 6, 7, 8, 9]
490+
let list = new LinkedList<number>(...values);
491+
expect(list.length).to.equal(6);
492+
expect(list.head).to.equal(4);
493+
expect(list.tail).to.equal(9);
494+
let result = list.first(3);
495+
expect(result.length).to.equal(3);
496+
expect(result[0]).to.equal(4);
497+
expect(result[1]).to.equal(5);
498+
expect(result[2]).to.equal(6);
499+
});
500+
501+
it('should return empty array when n is zero', () => {
502+
let values: number[] = [4, 5, 6, 7, 8, 9]
503+
let list = new LinkedList<number>(...values);
504+
expect(list.length).to.equal(6);
505+
expect(list.head).to.equal(4);
506+
expect(list.tail).to.equal(9);
507+
let result = list.first(0);
508+
expect(result.length).to.equal(0);
509+
});
510+
511+
it('should return the lesser of n values or length of list', () => {
512+
let values: number[] = [4, 5, 6, 7, 8, 9]
513+
let list = new LinkedList<number>(...values);
514+
expect(list.length).to.equal(6);
515+
expect(list.head).to.equal(4);
516+
expect(list.tail).to.equal(9);
517+
let result = list.first(7);
518+
expect(result.length).to.equal(6);
519+
expect(result[0]).to.equal(4);
520+
expect(result[1]).to.equal(5);
521+
expect(result[2]).to.equal(6);
522+
expect(result[3]).to.equal(7);
523+
expect(result[4]).to.equal(8);
524+
expect(result[5]).to.equal(9);
525+
})
487526
});

0 commit comments

Comments
 (0)