Can Someone please explain the difference in Behaviour ?
#include <iostream>
using namespace std;
struct Node {
    int data;
    Node* next;
};
// only for the 1st Node
void initNode(Node *head,int n){
    head->data = n;
    head->next =NULL;
}
void insertFront(Node *head, int n) {
    Node *newNode = new Node;
    newNode->data = n;
    newNode->next = head;
    head = newNode;
}
void display(Node *head) {
    Node *list = head;
    while(list) {
        cout << list->data << " ";
        list = list->next;
    }
    cout << endl;
    cout << endl;
}
int main() 
{
    Node *l1 = new Node;
    initNode(l1,10);
    display(l1);
    insertFront(l1,5);
    display(l1);
    insertFront(l1,6);
    display(l1);
    insertFront(l1,7);
    display(l1);
    return 0;
}
Some how the nodes are not linking. The output is : 10
10
10
10
If The program is coded using pointer to a pointer as below then it works fine. what am is missing ?
#include <iostream>
using namespace std;
struct Node {
    int data;
    Node* next;
};
// only for the 1st Node
void initNode(Node *head,int n){
    head->data = n;
    head->next =NULL;
}
void insertFront(Node **head, int n) {
    Node *newNode = new Node;
    newNode->data = n;
    newNode->next = *head;
    *head = newNode;
}
void display(Node *head) {
    Node *list = head;
    while(list) {
        cout << list->data << " ";
        list = list->next;
    }
    cout << endl;
    cout << endl;
}
int main() 
{
    Node *l1 = new Node;
    initNode(l1,10);
    display(l1);
    insertFront(&l1,5);
    display(l1);
    insertFront(&l1,6);
    display(l1);
    insertFront(&l1,7);
    display(l1);
    return 0;
}
Output correct as expected :
10
5 10
6 5 10
7 6 5 10
 
     
    