In the early 1970's Horst Feistel developed the following idea for an iterated block cipher.
Split the plaintext block into 2 pieces, (L0, R0) For each round i =1,2,...,n, compute Li = Ri-1 Ri = Li-1 ⊕ f(Ri-1, Ki) where f is the round function and Ki is the sub-key.
Then the ciphertext is (Ln, Rn).
Regardless of the function f, decryption is accomplished via
Ri-1 = Li Li-1 = Ri ⊕ f(Ri-1, Ki)