class Node {
constructor() {
this
.data = 0;
this
.next =
null
;
this
.prev =
null
;
}
}
function
func_connComp(head_ref, refArr, n) {
if
(head_ref ===
null
) {
return
0;
}
let connectedComponents = 0;
let refSet =
new
Set();
refSet.add(refArr[0]);
connectedComponents += 1;
for
(let i = 1; i < n; i++) {
refSet.add(refArr[i]);
if
(refArr[i].prev ===
null
) {
if
(!refSet.has(refArr[i].next)) {
connectedComponents += 1;
}
}
else
if
(refArr[i].next ===
null
) {
if
(!refSet.has(refArr[i].prev)) {
connectedComponents += 1;
}
}
else
if
(
refSet.has(refArr[i].prev) &&
refSet.has(refArr[i].next)
) {
connectedComponents -= 1;
}
else
if
(
!refSet.has(refArr[i].prev) &&
!refSet.has(refArr[i].next)
) {
connectedComponents += 1;
}
}
return
connectedComponents;
}
function
push(headRef, newData) {
var
newNode = {};
var
currentNode = newNode;
newNode.data = newData;
newNode.prev =
null
;
newNode.next = headRef;
if
(headRef !==
null
) {
headRef.prev = newNode;
}
headRef = newNode;
return
{
currentNode: currentNode,
headRef: headRef
};
}
function
printList(node) {
while
(node !==
null
) {
console.log(node.data);
node = node.next;
}
}
(
function
() {
var
head =
null
;
var
refToNodeN2AndHead = push(head, 2);
head = refToNodeN2AndHead.headRef;
var
refToNodeN4AndHead = push(head, 4);
head = refToNodeN4AndHead.headRef;
var
refToNodeN5AndHead = push(head, 5);
head = refToNodeN5AndHead.headRef;
var
refToNodeN10AndHead = push(head, 10);
head = refToNodeN10AndHead.headRef;
var
refToNodeN7AndHead = push(head, 7);
head = refToNodeN7AndHead.headRef;
var
refToNodeN1AndHead = push(head, 1);
head = refToNodeN1AndHead.headRef;
var
refArr = [refToNodeN5AndHead.currentNode, refToNodeN2AndHead.currentNode, refToNodeN7AndHead.currentNode, refToNodeN1AndHead.currentNode];
var
connectedComponents = func_connComp(head, refArr, 4);
console.log(
"Total number of connected components are "
, connectedComponents);
})();