Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/linkedList.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ export class LinkedList<T> {
isEmpty(): boolean;
clear(): void;
static fromArray<T>(values: (T extends LinkedListNode ? T : LinkedListNode)[]): LinkedList<T>;
reverse(): LinkedList<T>;
}
26 changes: 25 additions & 1 deletion src/linkedList.js
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,30 @@ class LinkedList {
});
return linkedList;
}
}
/**
* Reverses the linked list in-place.
* @public
* @returns {LinkedList}
*/
reverse() {
if (this.isEmpty() || !this._head.hasNext()) {
return this; // no change needed
}

let prev = null;
let current = this._head;
let next = null;

while (current instanceof LinkedListNode) {
next = current.getNext(); // store next
current.setNext(prev); // reverse pointer
prev = current; // move prev
current = next; // move current
}

this._head = prev;
return this;
}

}
exports.LinkedList = LinkedList;
31 changes: 31 additions & 0 deletions test/linkedList.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -215,4 +215,35 @@ describe('linkedList tests', () => {
]);
});
});

describe('.reverse()', () => {
it('reverse the linked list order', () => {
const list = new LinkedList();
list.insertLast(1);
list.insertLast(2);
list.insertLast(3);
list.insertLast(4);

list.reverse();

expect(list.toArray().map(n => n.getValue()))
.to.deep.equal([4, 3, 2, 1]);
});

it('reverse an empty list', () => {
const list = new LinkedList();
list.reverse();
expect(list.toArray()).to.deep.equal([]);
});

it('reverse a single-node list', () => {
const list = new LinkedList();
list.insertLast(99);
list.reverse();

expect(list.toArray().map(n => n.getValue()))
.to.deep.equal([99]);
});
});

});