Skip to content

Commit 3441c6d

Browse files
committed
Circular Linked List 👻
1 parent bede2a5 commit 3441c6d

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class Node {
2+
constructor(data) {
3+
this.data = data;
4+
this.next = null;
5+
}
6+
}
7+
8+
class LinkedList {
9+
constructor() {
10+
this.head = new Node("head");
11+
this.head.next = this.head;
12+
}
13+
14+
find(data) {
15+
let temp = this.head;
16+
while(temp.data != data)
17+
temp = temp.next;
18+
return temp;
19+
}
20+
21+
findPrev(data) {
22+
let temp = this.head;
23+
while(temp.next != null && temp.next.data != data)
24+
temp = temp.next;
25+
return temp;
26+
}
27+
28+
printList() {
29+
let temp = this.head;
30+
if(temp.next == temp)
31+
return "The Linked List is Empty";
32+
let str = "";
33+
while(temp.next != this.head) {
34+
str += temp.next.data + " -> ";
35+
temp = temp.next;
36+
}
37+
str += this.head.next.data + "\n";
38+
return str;
39+
}
40+
41+
insertAfter(data,currData) {
42+
const newNode = new Node(data);
43+
let curr = this.find(currData);
44+
curr.next = newNode;
45+
newNode.next = this.head;
46+
}
47+
48+
remove(data) {
49+
const prev = this.findPrev(data);
50+
if(prev.next != null)
51+
prev.next = prev.next.next;
52+
}
53+
}
54+
55+
module.exports = LinkedList;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
const expect = require('chai').expect;
2+
const CircularLinkedList = require('../../examples/datastructures/circular-linked-list');
3+
4+
describe('=> CIRCULAR LINKED LIST', function() {
5+
let names;
6+
before(function () {
7+
names = new CircularLinkedList();
8+
});
9+
10+
it('should create an Empty Linked List', function(done) {
11+
expect(names.head.data).to.equal("head");
12+
done();
13+
});
14+
15+
it('should print an Empty Linked List', function(done) {
16+
expect(names.printList()).to.equal("The Linked List is Empty");
17+
done();
18+
});
19+
20+
it('should insert into a Linked List', function(done) {
21+
names.insertAfter(1,"head");
22+
names.insertAfter(2, 1);
23+
names.insertAfter(3, 2);
24+
names.insertAfter(4, 3);
25+
expect(names.printList()).to.equal("1 -> 2 -> 3 -> 4 -> 1\n");
26+
done();
27+
});
28+
29+
it('should remove element from a Linked List', function(done) {
30+
names.remove(1);
31+
expect(names.printList()).to.equal("2 -> 3 -> 4 -> 2\n");
32+
done();
33+
});
34+
35+
describe('=> clear', function() {
36+
it('should clear the Linked List', function(done) {
37+
names.remove(2);
38+
names.remove(3);
39+
names.remove(4);
40+
expect(names.printList()).to.equal("The Linked List is Empty");
41+
done();
42+
});
43+
});
44+
45+
});
46+

0 commit comments

Comments
 (0)