I have seen this in some book/ tutorial.
When you pass in the head pointer (of linked list) into a function, you need to pass it as a double pointer.
For eg:
// This is to reverse a linked list where head points to first node.
void nReverse(digit **head)
{
digit *prev=NULL;
digit *curr=*head;
digit *next;
while(curr!=NULL)
{
next=curr->next;
curr->next=prev;
prev=curr;
curr=next;
}
*head=prev;
return;
}
This works fine.
It also works when I use single pointer like,
void nReverse(digit *head)
{
digit *prev=NULL;
digit *curr=head;
digit *next;
while(curr!=NULL)
{
next=curr->next;
curr->next=prev;
prev=curr;
curr=next;
}
head=prev;
return;
}
I tried printing the list by using the head pointer. Both the functions work fine.
Am I missing something ?
Thanks,
This is very C-like code, not C++.
Basically, when something is passed by-value the function operates on a copy of the data:
In C, you instead pass a pointer to the variable, and can change it that way:
For you, instead of an
intit’s adigit*. (Resulting in a pointer to pointer.)In C++, references were introduced. A reference is an alias to another object. So you’d do something like this:
A reference is generally preferred, since it enforces that you actually refer to an object, and simplifies both calling and operating code.
Of course in C++ you wouldn’t implement a list yourself, you’d use
std::list.