I have written a simple reverse function for the linked list, shown below:
typedef struct _NODE
{
int data;
_NODE *next;
}NODE;
void print(NODE *head)
{
NODE *start;
start = head;
while (start)
{
printf("%d ", start->data);
start = start->next;
}
}
NODE* reverse(NODE *head)
{
NODE *prev = NULL;
NODE *curr = head;
while (curr)
{
NODE *temp = curr->next;
curr->next = prev;
prev = curr;
curr = temp;
}
head = prev;
return head;
}
int main()
{
NODE *head = new NODE;
NODE *node1 = new NODE;
NODE *node2 = new NODE;
head->data = 1;
node1->data = 2;
node2->data = 3;
head->next = node1;
node1->next = node2;
node2->next = NULL;
reverse(head);
print(head);
getchar();
delete head;
delete node1;
delete node2;
head = NULL;
node1 = NULL;
node2 = NULL;
return 1;
}
I found the output will always be 1
. My question is why does the head pointer after the reverse
function always point to the node with value 1
. I have already assigned the previous pointer to the head pointer in the reverse
function.
But if I change below, the output became correct.
reverse(head);
To
head = reverse(head);