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