public V remove(K key) {
		if (key == null)
			return null;
		
		int index = hashFunction(key);
		
		if (mTable[index] != null) { // table bucket contains at least one entry
			Node currentNode = mTable[index];
			V temp;
			
			if (currentNode.mKey == key) { // if first node matches key
				temp = currentNode.mValue;
				
				if (currentNode.next != null) { // if there is another node following the one to be removed
					mTable[index] = currentNode.next;
				} else
					mTable[index] = null;
				
				return temp;
			}
			
			while (true) { // first node does not match, check rest of list
				if (currentNode.next == null) {
					return null;
				} else if (currentNode.next.mKey == key) {
					temp = currentNode.next.mValue;
					
					if (currentNode.next.next != null) { // if there is another node following the one to be removed
						currentNode.next = currentNode.next.next;
					} else
						currentNode.next = null;
					return temp;
				} else
					currentNode = currentNode.next;
			}
		} else // table bucket is empty
			return null;
	}