I note that you are using FROM dual, which has a distinct flavour of Oracle over it. However, you are posting in a forum for Transact-SQL on SQL Server, so I will give you an SQL Server solution. If you want a solution that runs on Oracle, you need to find an Oracle forum.
DECLARE @t TABLE (ID int, GRANT_DT date, REVOKE_DT date, C_Type varchar(20) )
INSERT @t
SELECT '1' AS ID, CAST('01-JAN-22' AS DATE) AS GRANT_DT, CAST('25-FEB-22' AS DATE) AS REVOKE_DT, 'In' AS C_Type
UNION ALL
SELECT '2' AS ID, CAST('01-JAN-22' AS DATE) AS GRANT_DT, CAST('31-DEC-49' AS DATE) AS REVOKE_DT, 'In' AS C_Type
UNION ALL
SELECT '3' AS ID, CAST('01-JAN-22' AS DATE) AS GRANT_DT, CAST('25-FEB-22' AS DATE) AS REVOKE_DT, 'In' AS C_Type
UNION ALL
SELECT '3' AS ID, CAST('01-MAR-22' AS DATE) AS GRANT_DT, CAST('31-DEC-49' AS DATE) AS REVOKE_DT, 'In' AS C_Type
SELECT *FROM @t
; WITH CTE AS (
SELECT *, next_grant = LEAD(GRANT_DT) OVER (PARTITION BY ID ORDER BY GRANT_DT)
FROM @t
)
SELECT ID, dateadd(DAY, 1, REVOKE_DT) AS GRANT_DT,
isnull(dateadd(DAY, -1, next_grant), '20491231') AS REVOKE_DT, 'Out' AS C_Type
FROM CTE
WHERE datediff(DAY, REVOKE_DT, next_grant) > 1 OR
next_grant IS NULL AND REVOKE_DT < '20491231'
UNION ALL
SELECT ID, GRANT_DT, REVOKE_DT, C_Type
FROM @t
ORDER BY ID, GRANT_DT