Link List


    
#include "bits/stdc++.h"
using namespace std;

class Node {

public:
    int data;
    Node *next;

    Node(int d) : data(d), next(NULL) {} 

};

class LinkedList {

private:
    Node *head;

public:

    LinkedList() : head(nullptr) {}

    ~LinkedList() {
        Node *curr = head;

        while(curr != NULL) {
            Node *nextNode = curr->next;
            delete curr;
            curr = nextNode;
        }
    }

    void insertAtHead(int data) {

        Node *tempNode = new Node(data);
        tempNode->next = head;
        head = tempNode;
    }

    void printList() {
        Node *currNode = head;

        if (currNode == nullptr) {
            cout << "Empty List" << endl;
            return;
        }

        while(currNode != nullptr){
            cout << currNode->data << " ==> ";
            currNode = currNode->next;
        }
        cout << "NULL" << endl;

    }

    void deleteNode(int key) {
        // 1. List is empty
        if(head == nullptr) {
            return;
        }

        // 2. Delete head node 
        if (head->data == key) {
            Node *tempNode = head;
            head = head->next;
            delete tempNode;

            return;
        }

       // 3. Delete last node
       Node *curr = head;
       Node *prev = nullptr;

       while (curr != nullptr && curr->data != key) {
           prev = curr;
           curr = curr->next;
       }

       if (curr == nullptr)
           return;

       prev->next = curr->next;
       delete curr;
    }
};

int main() {
    LinkedList ll;

    ll.insertAtHead(30);
    ll.insertAtHead(20);
    ll.insertAtHead(10);

    cout << "Elements in Linked List: ";
    ll.printList(); // Output: Elements in Linked List: 10 20 30 

    ll.deleteNode(20);

    cout << "Elements in Linked List: ";
    ll.printList(); // Output: Elements in Linked List: 10 30 

    return 0;
}

    

Comments