I obviously cant do that because Node doesn't have Debug trait implemented for it. I cant do it by just using #[derive(Debug)] because Node is not defined on the primitive type but on Generic type.
Please help me understand how can I solve this problem.
Of course you can derive Debug on Node. It will be active only if T: Debug, but if this is not the case you probably won't be able to do anything useful in the hand-written implementation anyway.
Note that the constraint is only declared on the second impl block in this case - this means that instances of Node and SimpleLinkedList that contain non-Debug data can exist, you just can't use the printlist method on them. If you wanted to enforce that all instances contain Debug data, then you would need to put a similar constraint on the type definitions as well.
Debug bounds have been added to the type definitions.
All methods must be in an impl block that constrains T to be Debug (because otherwise you'd be saying that anyT can be used for those methods, which conflicts with the constraints on the type itself).