For the benefit of the OP, I wasn't going to actually write any code, but I want to make sure I'm thinking correctly. Please excuse any syntax errors; this is still meant as pseudo-code.
Code:
struct node
{
int data;
node *next;
};
node* reverse(node* head)
{
node *temp, *back, *next;
for(temp = head, back = NULL; temp != NULL; temp = next)
{
next = temp->next;
temp->next = back;
back = temp;
}
return back;
}
On a list with 2 nodes:
Code:
Head of List: Node 1
Node 1 (next:Node 2)
Node 2 (next:NULL)
Call reverse(Node 1)
In reverse:
temp = Node 1
back = NULL
while (temp != NULL)
next = Node 2
Node 1 -> next = NULL
back = Node 1
temp = Node 2
while (temp != NULL)
next = NULL
Node 2 -> next = Node 1
back = Node 2
temp = NULL
return Node 2
Reversed list:
Head of List: Node 2
Node 1 (next:NULL)
Node 2 (next:Node 1)