text: class Node {
    constructor(data) {
      this.data = data;
      this.next = null;
    }
  }
  
  class SinglyLinkedList {
    constructor() {
      this.head = null;
    }
  
    insertAtHead(data) {
      const newNode = new Node(data);
      if (this.head == null) {
        this.head = newNode;
      } else {
        newNode.next = this.head;
        this.head = newNode;
      }
    }
  
    removeAtHead() {
      // check for underflow
      if (this.head == null) {
        console.log('Underflow');
        return;
      }
      // store head's reference data value in local data variable
      const data = this.head.data;
      this.head = this.head.next;
      return data;
    }
  
    insertAtEnd(data) {
      const newNode = new Node(data);
      if (!this.head) {
        this.head = newNode;
        return this;
      }
  
      let currentNode = this.head;
  
      while (currentNode.next) {
        currentNode = currentNode.next;
      }
  
      currentNode.next = newNode;
  
      return this;
    }
  
    printList() {
      // if head is null then list is empty
      if (this.head == null) {
        console.log('List is Empty');
      } else {
        // iterate through list until itr is not null
        let itr = this.head;
        while (itr != null) {
          console.log(itr.data);
          itr = itr.next;
        }
      }
    }
  }
  
  const array = new SinglyLinkedList();
  array.insertAtHead(1);
  array.insertAtHead('xyz');
  array.insertAtHead(1.1);
  array.removeAtHead();
  array.insertAtEnd(99);
  array.printList();
  
  