What is wrong with the following definition of headInsert? struct Node { int item; Node* link; }; typedef Node* NodePtr; void headInsert(NodePtr& head, int data) { NodePtr tmp = new Node; tmp->item = data; head->next = tmp; tmp->next = head->next; } NodePtr head; headInsert(head, 4); A. tmp should be declared to be a Node not a NodePtr. B. head->next is pointing to NULL. C. Nothing is wrong. D. If there were any nodes following head they are now lost. Solution B. head->next is pointing to NULL. Because of which tmp is not getting stored in the linked list Correct Code: struct Node { int item; Node* link; }; typedef Node* NodePtr; void headInsert(NodePtr& head, int data) { NodePtr tmp = new Node; tmp->item = data; // next of tmp should be assigned head tmp->link = head; head = tmp; }.