Search code examples
c++linked-listreverse

Why does linked list work for node name, but not the pointer?


I am writing the code for reversing a linked list. This is the code

Node* reverseLinkedList(Node *head)
{
    Node* temp = head;
    Node* prev = NULL;
    while(temp != nullptr) { 
        Node* next = temp->next;
        temp->next = prev;
        prev = temp;
        temp = next;
    }
    return prev;
}

And it works perfectly. However, since the next node is just temp->next, why can't I use

Node* reverseLinkedList(Node *head)
{
    Node* temp = head;
    Node* prev = NULL;
    while(temp != nullptr) { 
        Node* next = temp->next;
        temp->next = prev;
        prev = temp;
        temp = temp->next;
    }
    return prev;
}

The above now does not work. I would appreciate some clarity on how nodes are working here.Thanks!


Solution

  • because the temp->next were overwritten earlier

    Node* reverseLinkedList(Node *head)
    {
        Node* temp = head;
        Node* prev = NULL;
        while(temp != nullptr) { 
            Node* next = temp->next;
            temp->next = prev; // <<< here you assign new value
            prev = temp;
            temp = temp->next; // <<< here you use new value
        }
        return prev;
    }