Удаление без ключа - это как вообще? Как структура узнает, что именно удалять? Что-то же должно быть ключом, аргументом функции удаления! То есть "какой-то узел" должен содержать какие-то свойства, по которым происходит идентификация, хотя бы иметь адрес в памяти, и вот тогда этот адрес уже можно считать ключом.
Честно говоря, не понятно, зачем вообще ключ (из вопроса), если он не используется. Складывается ощущение, что нужно не подстраиваться под эти условия, а менять их.
В общем случае решением будет хеш-таблица, в которой в качестве ключа может быть, что угодно (т.е. любой тип данных, кроме разве что всяких null и т.п.). Возможно, потребуется пара таких структур: по "ключу" (из вопроса), по адерсу и т.д., - потому что у вас по сути получается несколько ключей.