Ok, I've got my stack class I made, but as you know if I push 1,2,3 in a stack i would expect 3 to get popped out first right?

Mine doesn't!!! What's wrong?

Code:
template <class T>
class List
{
	public:
		List();
		~List();
		void Push(T); // Pushes i onto stack
		T Pop(); // Pops top element from stack
		int IsEmpty(); // returns 1 if empty; 0 if not empty;
		int Contains(T);
	private:
		struct Node
		{
			T Item;
			Node *Next;
		};
		Node *Head;
};


template <class T>
List<T>::List()
{
	Head = 0;
}

template <class T>
List<T>::~List()
{
}

template <class T>
void List<T>::Push(T i) // Pushes i onto stack
{
	Node *tmp, *curr;
	
	//create new node and store integer
	tmp = new Node;
	tmp->Item = i;
	tmp->Next = 0;
	
	//add to top of stack if not empty
	if(Head != 0)
	{
		curr = Head;
		while(curr->Next)
			curr = curr->Next;
		curr->Next = tmp;
	}
	else
		Head = tmp;
}

template <class T>
T List<T>::Pop() // Pops top element from stack
{
	T tmp;
	
	if(Head == 0) //nothing to pop!
		return 0;
	
	tmp = Head->Item;
	Head = Head->Next;
	
	return tmp;
}

template <class T>
int List<T>::IsEmpty() // returns 1 if empty; 0 if not empty;
{
	if(Head == 0) 
		return 1;
	return 0;
}

template <class T>
int List<T>::Contains(T i)
{
	Node *curr;
	
	if(Head->Item == i)
		return 1;
	else
	{
		curr = Head;
		while(curr->Next)
		{
			if(curr->Item == i)
				return 1;
			else
				curr = curr->Next;
		}
	}
	return 0;
}