Why does mysql make delete offset? I am implementing database(College project).So I come across innodb diagrams in github https://github.com/jeremycole/innodb_diagrams/blob/master/images/InnoDB_Structures/B%2BTree%20Record%20Delete%202.png
    I see that we maintain a delete chain why we wanna do this because if we write the whole block(because it if more efficient write whole block ) back why don't just simply delete that record .And what is the use of maintaining delete chain.As we can see they use linked list so deleting the whole record requires no extra cost. Please explain or tell me where i am wrong?
The list is kept for MVCC (https://en.wikipedia.org/wiki/Multiversion_concurrency_control) as @jkavalik mentions in his comment. This is required for providing isolation for transactions  (https://en.wikipedia.org/wiki/ACID). A record cannot be deleted under you as long as you're in a transaction.

When you start a transaction (depending on your isolation level) you get a "snapshot" of the current state of the database. This is implemented in MVCC by TRX_ID which is being checked against your actual transaction id. If it's higher you cannot see that because it means it was updated after you started the transaction. 

Deleted (and also old versions of updated) records are picked up by a purge thread in the background as of MySQL 5.6. It used to be in the master thread and now the number of threads is configurable also (https://dev.mysql.com/doc/refman/5.5/en/innodb-improved-purge-scheduling.html)