How to define a bijection between $(0,1)$ and $(0,1]$? How to define a bijection between $(0,1)$ and $(0,1]$?
  Or any other open and closed intervals?


If the intervals are both open like $(-1,2)\text{ and }(-5,4)$ I do a cheap trick (don't know if that's how you're supposed to do it):
I make a function $f : (-1, 2)\rightarrow (-5, 4)$ of the form $f(x)=mx+b$ by
\begin{align*}
-5 = f(-1) &amp;= m(-1)+b \\
4 = f(2) &amp;= m(2) + b
\end{align*}
Solving for $m$ and $b$ I find $m=3\text{ and }b=-2$ so then $f(x)=3x-2.$

Then I show that $f$ is a bijection by showing that it is injective and surjective.
Choose an infinite sequence $(x_n)_{n\geqslant1}$ of distinct elements of $(0,1)$. Let $X=\{x_n\mid n\geqslant1\}$, hence $X\subset(0,1)$. Let $x_0=1$. Define $f(x_n)=x_{n+1}$ for every $n\geqslant0$ and $f(x)=x$ for every $x$ in $(0,1)\setminus X$. Then $f$ is defined on $(0,1]$ and the map $f:(0,1]\to(0,1)$ is bijective.

To sum up, one extracts a copy of $\mathbb N$ from $(0,1)$ and one uses the fact that the map $n\mapsto n+1$ is a bijection between $\mathbb N\cup\{0\}$ and $\mathbb N$.
Note that:

If A is a countable infinite set and a is any element in A, then: there's a bijection for A \ {a} and A;

Or, equivalently if A is contained strictly in B, b is in B \ A, A is countably infinite then: there's a bijection for A $\bigcup$ {b} and A;

To prove the second claim, for example: denote A = {an| n is in $N$}, let: b = f(a0), and an = f(an + 1) for n >= 0. then f is a bijection.

(Similar to a previous answer for your question)

If A is uncountable, you can choose a subset in A as A' that is countable, and do a similar thing to add element to A'. (similar proof for removing element from A, by choosing the element you wish to remove in A')

By this, you can add \ remove as many finite element to an infinite set A as possible, and still have a bijection between them. This is a famous question, called "Hilbert's Hotel", to the name of German Mathematician David Hilbert, you can see more on wiki.

(In fact, (1) if A is countably many, you can even add countably infinite elements to A, and there's still a bijection; and sometimes, you can also do this for removing (2) if A is uncountable, you can always do this for both add/remove a coutably many set to/from A)